2016-10-17 16 views
1

resteasy-spring-3.0.19とjboss-jaxrs-api_2.0_spec-1.0.0のSpringブートアプリケーションがあります。Spring RestEasyインターセプタ

私は残りのすべての許可を傍受したいと思います。

インターセプタが呼び出されていません。また、どのようにしてインターセプタのターゲットメソッド@Pathアノテーション値を取得できますか?

これはSpringブートアプリケーションに登録する必要がありますか?ポストマッチングフィルタ(@PreMatching注釈なしフィルタ)で

@Provider 
public class AuthorizationtInterceptor implements ContainerRequestFilter{ 

    /** 
    * 
    */ 
    public AuthorizationtInterceptor() { 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 

     String method = requestContext.getMethod(); 

     UriInfo uriInfo = requestContext.getUriInfo(); 

     // Need the target method @Path annotation value .... 

    } 

} 

ターゲットレストクラス、

@Named 
@Singleton 
@Path(ROOT_PATH) 
public class WebController { 

    @GET 
    @Path(TEST_PATH) 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getUser(@Context final HttpServletRequest request) { 
    } 
} 

答えて

1

、あなたはマッチしたリソースクラスとリソースメソッドを取得するためにResourceInfoを使用することができます。 @Context注釈使用して、フィルター内の

を注入ResourceInfo

@Context 
private ResourceInfo resourceInfo; 

は、次にリソースクラスを取得し、@Path注釈抽出:

:資源方法、使用を取得するには

Path path = resourceInfo.getResourceClass().getAnnotation(Path.class); 

Path path = resourceInfo.getResourceMethod().getAnnotation(Path.class); 

あなたが達成しようとしているのは、承認目的で@Path注釈の値を比較する代わりに、フィルタをリソースクラスまたはメソッドのセットにバインドすることが考えられます。詳細はanswerを参照してください。


アプリケーションを設定する方法に応じて、あなたはあなたのApplicationサブクラスにしたり、web.xml配備記述子にフィルタを登録する必要があります。

+0

@Configurationアノテーションを持つクラスの他のフィルタを登録するかのように、フィルタを登録した後に呼び出されています。パスパス= resourceInfo.getResourceClass()。getAnnotation(Path.class);一致するメソッドではなく、クラスアノテーションを返します。私もHttpServletRequestが必要なので、私はコンテキスト プライベートHttpServletRequest要求;を使用します。これでいい? – user1578872

+0

@ user1578872はい、 '@Context HttpServletRequest request'を使って' HttpServletRequest'を注入することができます。 '@ Context'で注入できるタイプの完全なリストについては、この[answer](http://stackoverflow.com/a/35868654/1426227)を参照してください。 –

関連する問題