HttpServletRequest
有一个方法 setAttribute(String, Object)
。
如何从 ContainerRequest
中提取此属性?
我没找到:getAttribute
方法!
代码
public class AuthenticationFilter implements Filter {
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest) servletRequest;
// .... ....
httpReq.setAttribute("businessId", businessId);
}
}
在泽西过滤器中:
private class Filter implements ResourceFilter, ContainerRequestFilter {
public ContainerRequest filter(ContainerRequest request) {
// ..extract the attribute from the httpReq
}
}
最佳答案
你不能。它们不会以任何方式通过 Jersey API 公开。如果您搜索 Jersey 代码库,您会发现没有使用 HttpServletRequest.getAttributeNames()
,如果它们被大量复制,您会期望使用它们。您还会发现 HttpServletRequest.getAttribute()
的用途很少,而且它严格用于内部簿记。
但是请注意,当部署在 Servlet 上下文中时,JAX-RS 允许您使用 @Context
注释注入(inject)原始 HttpServletRequest。我不确定您是否可以在 Jersey 过滤器中执行此操作,但它适用于 MessageBodyReaders/Writers 和资源类。
更新:我已经检查过了,事实上,您可以通过简单地包括以下内容将 HttpServletRequest 注入(inject) Jersey ContainerRequestFilter:
@Context private HttpServletRequest httpRequest;
关于java - 如何从 Jersey 的 ContainerRequest 中提取请求属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16911131/