当前位置:  开发笔记 > 数据库 > 正文

如何使用JAX-RS中的过滤器向HTTP请求添加标头?

如何解决《如何使用JAX-RS中的过滤器向HTTP请求添加标头?》经验,为你挑选了1个好方法。

我正在通过添加单个标头来修改HttpRequestWebFilterrequest使用HttpServletRequestWrapper实现类:

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.

我怎么解决这个问题?



1> cassiomolin..:

有关如何使用servlet过滤器将HTTP标头添加到请求的详细信息,请参阅此问题.如果您打算使用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");
    }
}

请注意以下事项:

所述ContainerRequestContext#getHeaders()返回一个可变多值图,其包含请求报头.

@Provider注释标记的扩展接口期间提供扫描阶段,应该是由JAX-RS运行时发现的实现.

有关JAX-RS过滤器的更多详细信息,请查看Jersey文档.JAX-RS过滤器可以全局应用,也可以与端点子集绑定名称.

获取标头值

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

@Context
HttpHeaders httpHeaders;

然后使用HttpHeadersAPI获取标头值:

HttpHeaders#getHeaderString(String)

HttpHeaders#getRequestHeaders()

HttpHeaders#getHeaderString(String)

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有