我正在使用 RestEasy 3.0.2,它是第一个 JAX-RS 2 实现之一,并在 Tomcat 7 中运行我的应用程序。我还通过 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);
}
}
注意:AuthenticationProvider是@RequestScoped。
通常,此解决方案有效。正在注入组件,并且正在按预期处理请求。
但我仍然怀疑过滤器的生活范围。如果它是应用程序范围的,那么这显然会导致确定性测试无法发现的“有趣”并发问题。
我查看了各种文档、指南和示例,但我发现没有一个使用过滤器注入或说明过滤器范围。