我有Zuul网关作为Angular应用程序和我们的微服务之间的代理。我创建了一个zuul过滤器,为每个请求添加几个标头。
@Component
public class RoutesAuthenticationFilter extends ZuulFilter {
@Override
public String filterType() {
return "route";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
ctx = RequestContext.getCurrentContext();
ctx.addZuulRequestHeader("principal", principal);
ctx.addZuulRequestHeader("customerheader", String.valueOf("testheader"));
return null;
}
这已满足我对邮递员的所有要求。
我开始发现它没有为Angular应用程序通过网关向服务发出的请求添加/删除这些标头。
当我在添加请求后查看请求中的标头的日志时,我看到请求包含所有请求都包含的标头
Headers from the requet after adding them all: { principal=john123, x-forwarded-host=localhost:8080, x-forwarded-proto=http, x-forwarded-prefix=/application-management, x-forwarded-port=8080, customerheader=testheader, x-forwarded-for=0:0:0:0:0:0:0:1}
但是当我在服务中打印它们时,很少有请求会丢失它们
2018-08-17 11:23:47.709 INFO [application-management,56a2962a54770966,56a2962a54770966,false] 10952 --- [nio-9090-exec-9] c.f.c.v.d.c.i.RequestInterceptor : Entered request interceptor
customer header from request: testheader
principal from req: john123
2018-08-17 11:23:47.713 INFO [application-management,058aad714328a61f,058aad714328a61f,false] 10952 --- [nio-9090-exec-2] c.f.c.v.d.c.i.RequestInterceptor : Entered request interceptor
customer header from request: null
principal from req: null
在上面的输出中,一个请求缺少标头,而一个请求存在标头。
这两个请求是从Angular应用异步发出的。
如果我两个接一个地打电话,我看不到这个问题,这意味着如果我打一个电话并等待响应并发出下一个,那么就不会丢失标题