java - 如何从 Jersey 的 ContainerRequest 中提取请求属性?

标签 java jersey

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/

相关文章:

java - 仅使用添加和删除来交换列表中的项目

java - 在 ContainerResponseFilter 中使用 Moxy 进行 JSON 解码

java - 如何解决使用 jersey 在 java Rest 服务中生成 xml 的问题?

java - JAX-RS( Jersey 实现)ExceptionMapper<Throwable> 未捕获 ConstraintViolationException

Java 扫描仪无法识别文件名?

java - 我如何找到我的代码中所有未关闭的实例和对象?

java - 如何将值放入数组的每个槽中

java - File.delete() 方法不起作用..你能帮我吗?

java - 使用 spring security 找不到 AuthenticationProvider

java - Maven Java Web 应用程序与 jersey 的映射