【问题标题】:How to add a header to HTTP request using a filter in JAX-RS?如何使用 JAX-RS 中的过滤器向 HTTP 请求添加标头?
【发布时间】:2023-04-04 19:13:02
【问题描述】:

我正在修改我的WebFilter 上的HttpRequest,方法是使用HttpServletRequestWrapper 实现类向request 添加单个标头:

HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(request);
requestWrapper.addHeader(OAuth.OAUTH_ACCESS_TOKEN, accessTokenWord);
chain.doFilter(requestWrapper, response);

doFilter(requestWrapper, response) 执行后,JAX-RS 将请求引向其资源,该资源具有@RequestScoped 字段:

@Inject
protected HttpServletRequest request;

但是,它不包含任何预期的标头:

@PostConstruct
protected void initialize_resources() throws IllegalStateException {

    this.currentUser = null;
    String accessToken = this.request.getHeader(OAuth.OAUTH_ACCESS_TOKEN);
    AccessToken accessToken = this.memcachedResources.getMemcachedAccessTokenRepository()
                                  .get(accessToken);

    if (accessToken != null && StringUtils.isNotEmpty(accessToken.getUser_id())) {
        this.currentUser = this.em.find(User.class, accessToken.getUser_id());
        this.currentClient = accessToken.getClientId();    
    }
}

所以,this.request.getHeader(OAuth.OAUTH_ACCESS_TOKEN)null

我该如何解决?

【问题讨论】:

    标签: jakarta-ee jax-rs


    【解决方案1】:

    有关如何使用 servlet 过滤器将 HTTP 标头添加到请求的详细信息,请参阅此 question。如果您打算使用 JAX-RS 过滤器,请继续阅读。


    JAX-RS 过滤器

    一旦您使用 JAX-RS,您最好使用ContainerRequestFilter 如下所示为请求添加标头:

    @Provider
    public class MyContainerRequestFilter implements ContainerRequestFilter {
    
        @Override
        public void filter(ContainerRequestContext requestContext) throws IOException {
            requestContext.getHeaders().add("header", "value");
        }
    }
    

    注意以下几点:

    有关 JAX-RS 过滤器的更多详细信息,请查看Jersey documentation。 JAX-RS 过滤器可以全局应用,也可以name-bound 应用于端点子集。

    获取标题值

    在您的 REST 端点中,您可以注入 HttpHeaders

    @Context
    HttpHeaders httpHeaders;
    

    然后使用HttpHeaders API 获取标头值:

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2017-01-04
      相关资源
      最近更新 更多