将自定义数据从 Jersey Filter 服务传递到 Jersey End-Point 服务

Posted

技术标签:

【中文标题】将自定义数据从 Jersey Filter 服务传递到 Jersey End-Point 服务【英文标题】:Passing custom data from Jersey Filter service to Jersey End-Point service 【发布时间】:2014-12-03 14:10:26 【问题描述】:

我们处于使用 Jetty-Felix HTTP 服务器的 OSGI 环境中。

我们有一个实现 Jersey 过滤器服务的包。

另一个包实现了 Jersey 端点类。

在Filter中,我们使用ContainerRequestContext.setProperty()设置了一些自定义属性。

我的问题是如何从端点方法访问这些属性?

@Context 似乎没有让我访问任何我们可以取回属性的东西。

谢谢

【问题讨论】:

你能用请求属性代替吗?它们的目的之一是在过滤器和 servlet 之间传递属性。我必须有办法从 Jetty 过滤器和端点访问 ServletRequest。 【参考方案1】:

其实在过滤器中,我们使用的是ContainerRequestContext.setProperty(key, value);

在端点,我们可以用 value = HttpServletRequest.getAttribute(key); 检索它

然后我遇到的问题是我试图将@Context 作为类实例注入。但由于它是每个请求,它应该作为函数参数注入,就像这样:

@GET
@Path("/something")
@Produces(MediaType.APPLICATION_JSON)
public AClass getSomething(@Context HttpServletRequest servletRequest) 
   // Retrieve my thing from the filter
   MyThing thing = (MyThing)servletRequest.getAttribute("the-key-to-my-thing");

   return new AClass(mything);

【讨论】:

以上是关于将自定义数据从 Jersey Filter 服务传递到 Jersey End-Point 服务的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义参数传递给事件处理程序

将自定义参数传递给 uibutton #selector swift 3

Android - 如何将自定义对象传递给片段

是否存在某种方式将自定义参数传递给 Firebase 上的短动态链接?

将自定义启动参数传递给 detox

将自定义表单参数传递给表单集