我目前正致力于基于RESTeasy的RESTful服务。我有一个过滤器类,它充当服务器请求过滤器以及服务器响应过滤器(即它实现ContainerRequestFilter
和ContainerResponseFilter
接口)。
在请求开始时,我使用过滤器将对象放入ThreadLocal
。整个请求中的资源使用此对象。在请求结束时,在发送响应之前,过滤器会从ThreadLocal
中删除对象。
我的问题是,是否保证请求过滤器,资源和响应过滤器都将在同一个线程中执行?是否有可能在请求过滤器将对象放入ThreadLocal
后,另一个线程将执行请求(因此无法访问该对象)?
我确信情况就是这样,但后来我看到了这个http://jersey.576304.n2.nabble.com/Does-filter-method-of-ContainerRequestFilter-run-in-resource-method-thread-td7582648.html(官方泽西岛论坛),现在我有疑虑。
答案 0 :(得分:2)
javax.ws.rs.container.ContainerRequestContext.setProperty(...)
和
javax.ws.rs.container.ContainerRequestContext.getProperty(...)
可能是正确的方法。 javadoc声明:
在Servlet容器中,属性与ServletRequest同步,并公开ServletRequest中可用的所有属性。对属性的任何修改也会反映在关联的ServletRequest的属性集中。