在网关级别的 dofilter 中为请求添加自定义标头

Posted

技术标签:

【中文标题】在网关级别的 dofilter 中为请求添加自定义标头【英文标题】:Add Custom Headers for request in dofilter at Gateway level 【发布时间】:2019-05-23 11:56:08 【问题描述】:

我正在实现基于请求 uri 的 api 网关。我需要在chain.doFilter(request,response) 中添加额外的标题。

我的过滤器是如下的 jwt 过滤器

public class JwtAuthenticationFilter extends OncePerRequestFilter
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException 
        CustomHttpServletRequest cRequest = new CustomHttpServletRequest(request);

        /* authenticate user for valid token if valid then add the following header*/

        if(request.getRequestURI().equals("/testService/updateHeader")) 
              cRequest.putHeader("test","Test-header");
        


        filterChain.doFilter(cRequest, response);
    

基于reference实现:

在我的测试服务中并尝试在标头中获取标头我无法获取标头名称

【问题讨论】:

【参考方案1】:

我想问题是在 filterChain.doFilter(request, response) 你使用原始请求,但不是带有自定义标头的新请求。改变

filterChain.doFilter(request, response);

filterChain.doFilter(cRequest, response);

【讨论】:

我正在传递 cRequest 忘记在问题中提及 您的“测试服务”在哪里?它是否在过滤器链中的此过滤器之后? testservice 是另一个在不同端口上运行的微服务,然后路由是 /testService/** 将重新路由到上面提到的 testservice 实例,代码将在客户端和服务之间每个请求和响应会的。 此请求在此过滤器的应用程序内部处理。如果您的另一个服务处理了第一个应用程序的响应,那么您需要在第一个应用程序的响应中添加标头,即第二个应用程序的请求。 当请求到达网关端口时,网关会将请求路由到该服务(应用程序)。它将通过上述过滤器处理请求,然后路由到另一个服务(应用程序)。

以上是关于在网关级别的 dofilter 中为请求添加自定义标头的主要内容,如果未能解决你的问题,请参考以下文章

在 Woocommerce 中为特定支付网关添加自定义费用

向 IMG、VIDEO 和 AUDIO 请求添加自定义标头

如何在 Tomcat 中添加自定义标头?

Springboot 过滤器

如何在 Laravel 5.5 中为选定的请求类设置自定义响应

如何在 react-native 中为 webView 请求设置自定义标头