我正在使用RestEasy 3.0.2,它是最早的JAX-RS 2实现之一,并在Tomcat 7中运行我的应用程序.我还通过WELD在我的应用程序中使用注入,WELD通过其CDI适配器与RestEasy集成.到目前为止一切正常.
现在,我编写了一个ContainerRequestFilter的实现,以在传入请求到达资源之前对其进行身份验证.JAX-RS标准表示可以为每个资源以及使用@Provider注释注释的每个其他JAX-RS组件进行注入.
以下是我的过滤器实现的简化版本:
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {
@Inject
AuthenticationProvider authenticationProvider;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
authenticationProvider.authenticate(requestContext);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:AuthenticationProvider是@RequestScoped.
通常,此解决方案有效.正在注入组件并按预期处理请求.
但我仍然怀疑过滤器的生活范围.如果它是应用程序作用域,那么这显然会导致"有趣"的并发问题,这些问题在确定性测试中无法找到.
我已经查看了各种文档,指南和示例,但我发现没有使用过滤器注入或者说过滤器范围.