【发布时间】:2013-07-27 11:21:16
【问题描述】:
我正在使用 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。
一般来说,这个解决方案是有效的。正在注入组件,并且正在按预期处理请求。
但我仍然怀疑过滤器的作用域。如果它是应用程序范围的,那么这显然会导致确定性测试无法发现的“有趣”并发问题。
我查看了各种文档、指南和示例,但我发现没有一个使用过滤器注入或说明过滤器范围。
【问题讨论】:
-
为什么不实现 javax.servlet.Filter 呢?这似乎很适合您想要实现的目标。
-
JAX-RS 过滤器可用作匹配后过滤器,这意味着您可以通过注释或 DynamicFeature 实现将它们应用于特定资源。没有合理的努力,javax.servlet.Filter 也是不可能的。
标签: jakarta-ee jax-rs cdi resteasy