gpt4 book ai didi

java - 如何从常规 servlet 过滤器访问 JAX RS 方法?

转载 作者:行者123 更新时间:2023-11-29 09:30:07 25 4
gpt4 key购买 nike

我正在为我的 JAX-RS API 创建自定义身份验证模型。由于我使用的是 Java EE 6,它不支持拦截器,因此我必须使用常规过滤器来完成。

我想根据一组规则(如公共(public)和私有(private)方法)注释我的 JAX-RS 方法。为此,我需要通过过滤器访问我的资源方法(以便能够读取注释)。

我该怎么做?是否有任何其他不涉及将我的环境更新到 JAX-RS 2.0 的好选择?

编辑 1:不幸的是,我正在寻找可移植性。

最佳答案

我们开始了关于 CDI 的对话,但评论中无法包含该信息...所以为了解决您的顾虑:

  1. CDI 拦截器是可移植的。
  2. 为了访问HttpServletRequest,您需要一个前端过滤器将其置于上下文中(例如ThreadLocal 或CDI 的@RequestScoped 以及一些生产者)。但是 DeltaSpike 为您介绍了 servlet模块。另请查看 security模块。
  3. HttpServletRequest 注入(inject)拦截器,无需对资源本身进行额外的参数。
  4. 要更改返回的响应,只需从 @AroundInvoke 拦截器方法返回一些内容。您可以使用 InvocationContext.proceed() 访问原始方法返回的对象。 .

总结一下(几乎是伪代码):

@MySecurityInterceptorBinding
public class MySecurityInterceptor {
@Inject HttpServletRequest request;

@AroundInvoke
public Object secure(InvocationContext ctx) {
// check security
if( request.isUserInRole("foo") ) {
Object value = ctx.proceed();
// modify the returned value
((MyCustomResponseBase) value).setSecurityPassedFlag(true);
return value;
// or change it altogether (I'm not sure if this is entirely possible, try and see :)
MyResponseValueWrapper w = new MyResponseValueWrapper(value);
w.setXxxx("yyyy");
return w;
}
else {
// handle it...
}
}

关于java - 如何从常规 servlet 过滤器访问 JAX RS 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21301896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com