在网关级别的 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 中为请求添加自定义标头的主要内容,如果未能解决你的问题,请参考以下文章