zuul 转发请求,header丢失的问题
问题:不知道你们有没有遇到这样的问题,微服务中,zuul作为网关会去转发请求给另一个业务模块,但是header会丢失。原因:主要是zuul底层有默认过滤,会将(cookie,Set-Cookie,Authorization)等敏感信息忽略掉,所以有些header参数会丢失。解决:zuul:host:connect-timeout-millis: 60000socket-timeout-millis
·
问题:
不知道你们有没有遇到这样的问题,微服务中,zuul作为网关会去转发请求给另一个业务模块,但是header会丢失。
原因:
主要是zuul底层有默认过滤,会将(cookie,Set-Cookie,Authorization)等敏感信息忽略掉,所以有些header参数会丢失。
解决:
zuul:
host:
connect-timeout-millis: 60000
socket-timeout-millis: 120000
retryable: true
sensitive-headers:
ignored-headers: Access-Control-Allow-Credentials,Access-Control-Allow-Origin,Vary,X-Frame-Options,token
1、zuul的yml文件配置中,将sensitive-headers 后配置不让zuul忽略的参数,或者直接为“”,为“”则代表所有的header都不过滤。
2、ignored-headers: 后面跟的是不忽略response的内容。
3、服务之间通过client调用时,需要在拦截器中将用到的header参数get一遍,再放到RequestTemplate中去,然后下一层的服务就能获取到header参数了。
@Configuration
public class FeignTokenInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
HttpServletRequest request = getServletRequest();
if (null == request){
return;
}
String headers = getHeaders(request);
template.header(CommonConstants.HEADER_TOKEN_INFO_KEY, getHeaders(request));
template.header(CommonConstants.HEADER_DEVICE_ID, request.getHeader(CommonConstants.HEADER_DEVICE_ID));
template.header(CommonConstants.HEADER_DEVICE_TYPE, request.getHeader(CommonConstants.HEADER_DEVICE_TYPE));
template.header(CommonConstants.HEADER_PLATFORM_ID, request.getHeader(CommonConstants.HEADER_PLATFORM_ID));
}
private HttpServletRequest getServletRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
private String getHeaders(HttpServletRequest request){
return request.getHeader(CommonConstants.HEADER_TOKEN_INFO_KEY);
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)