我有一个资源类,我希望能够在调用资源方法之前检查身份验证 token ,从而避免将 token 直接传递到资源方法中。
我已将以下内容添加到 web.xml:
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>com.michael.services.interceptors.AuthorisationInterceptorImpl</param-value>
</context-param>
我的拦截器实现如下:
@Provider
public class AuthorisationInterceptorImpl implements javax.ws.rs.container.ContainerRequestFilter {
@Inject
private ApiAuthenticationService apiAuthenticationService
@Override
public void filter(ContainerRequestContext requestContext) {
//Code to verify token
}
}
过滤器方法在我的资源类中的方法之前被调用;但是,当我尝试调用它的方法时,apiAuthenticationService 没有被注入(inject)并且为空。
我正在使用 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。
关于jboss - 将拦截器与 Tapestry Resteasy 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562514/