12

JAX-RS/Jersey を使用して WebService に取り組んでいます。

ユーザーの認証を目的とするContainerRequestFilterを設定しました。認証で一部のパスを保護する必要があるだけで、残りはすべての人が利用できます。

パスを保護する必要があるかどうかを確認できるように、ContainerRequestFilter の ExtendedUriInfo を介してmatchedResources/matchedResults を取得したいと考えています。ExtendedUriInfo が設定された後、一致したリソース クラスとメソッドが呼び出される前に呼び出されるフィルターを作成する方法はありますか?

4

3 に答える 3

10

より一般的な答えは次のとおりです (たとえば、CXF のような別の jax-rs 実装を使用している場合)。

以下をフィルター クラスにインスタンス変数として追加するだけです。

@環境

ResourceInfo 情報;

"javax.ws.rs.container.ResourceInfo は新しい JAX-RS コンテキストであり、フィルターとインターセプターに挿入して、どのリソース クラスとメソッドが呼び出されようとしているかを確認できます。 "

(ソース: https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Basics#JAX-RSBasics-ResourceInfo )

元の回答はこちら

于 2013-12-11T13:10:25.530 に答える
3

私はそれを理解することができました。

私が見つけたアプローチは、 ContainerRequestFilterでこれを行うことを放棄し、代わりにResourceFilterFactoryを作成することです。ResourceFilterFactoryで使用できます

AbstractMethod.isAnnotationPresent(clazz)

カスタム注釈が存在するかどうかを判断します。アノテーションが存在する場合、 AuthenticationContainerRequestFilterを含むリストを返すことができます。

この回答を読んでいる人へのもう 1 つのヒントは、ResourceFilterFactoryアプローチを使用する場合、ContainerRequestFilter での注入が機能しないことです。私がしたことは、ResourceFilterFactoryで注入を行い、注入されたオブジェクトをそのコンストラクターを介してContainerRequestFilterに渡すことでした。

于 2012-08-05T23:43:36.053 に答える