Jboss 与Tapestry Resteasy一起使用拦截器

Jboss 与Tapestry Resteasy一起使用拦截器,jboss,resteasy,tapestry,tynamo,Jboss,Resteasy,Tapestry,Tynamo,我有一个资源类,我希望能够在调用资源方法之前检查身份验证令牌,从而避免将令牌直接传递到资源方法中 我已将以下内容添加到web.xml中: <context-param> <param-name>resteasy.providers</param-name> <param-value>com.michael.services.interceptors.AuthorisationInterceptorImpl</pa

我有一个资源类,我希望能够在调用资源方法之前检查身份验证令牌,从而避免将令牌直接传递到资源方法中

我已将以下内容添加到web.xml中:

<context-param>
        <param-name>resteasy.providers</param-name>
       <param-value>com.michael.services.interceptors.AuthorisationInterceptorImpl</param-value>
</context-param>
在我的资源类中的方法之前调用filter方法;但是,apiAuthenticationService没有被注入,并且在我尝试调用其方法时为null。
我使用的是Tapestry 5.3.7、Tapestry Resteasy 0.3.2和Resteasy 2.3.4.Final。
这可以做到吗?

我不认为这会奏效,只要快速浏览一下tapestry resteasy代码就知道了

@Inject注释是tapestry ioc的一部分;如果类不是由Tapestry实例化的,则不支持@Inject注释

web.xml
中定义的过滤器由servlet容器(Jetty、Tomcat等)实例化,这些容器对Tapestry和Tapestry注释没有任何专门知识

我认为您最好在Tapestry的HttpServletRequestHandler或RequestHandler管道中提供一个过滤器(请参阅它们的JavaDoc)。但是,我不确定如何访问ContainerRequestContext。

使用,您不需要在web.xml文件中定义提供程序

如果您想使用Tapestry的自动构建机制,只需将提供程序与资源一起移动到.rest包

如果不想使用autodiscovery/autobuild,只需将其贡献给javax.ws.rs.core.Application

@Contribute(javax.ws.rs.core.Application.class)
    public static void configureRestProviders(Configuration<Object> singletons, AuthorisationInterceptor authorisationInterceptor)
    {
        singletons.add(authorisationInterceptor);
    }
@Contribute(javax.ws.rs.core.Application.class)
公共静态void configureRestProviders(配置单例、授权侦听器授权侦听器)
{
添加(授权拦截器);
}
尽管您可以使用rest提供者来实现安全性,但采纳Howard的建议并在tapestry管道中实现您自己的过滤器可能是一个好主意


顺便说一句,你也可以试试:)

谢谢霍华德,我会调查的。
@Contribute(javax.ws.rs.core.Application.class)
    public static void configureRestProviders(Configuration<Object> singletons, AuthorisationInterceptor authorisationInterceptor)
    {
        singletons.add(authorisationInterceptor);
    }