zuul 转发请求,header丢失的问题

问题:

        不知道你们有没有遇到这样的问题,微服务中,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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 如果zuul返回"missing authorization header"的错误信息,通常意味着在进行身份验证时没有提供正确的凭据。在许多情况下,这意味着在请求的HTTP标头中没有包含有效的身份验证令牌。 要解决此问题,你需要检查你的应用程序是否正确地提供了身份验证令牌。这通常是通过在HTTP标头中包含"Authorization"字段来完成的。例如,在使用基本身份验证时,HTTP标头可能如下所示: ``` Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== ``` 如果你使用的是其他类型的身份验证方法,则需要提供适当的令牌。例如,使用OAuth 2.0身份验证时,HTTP标头可能如下所示: ``` Authorization: Bearer abcdefghijklmnopqrstuvwxyz ``` 请确保你的应用程序正确地提供了身份验证令牌,以避免出现"missing authorization header"错误。 ### 回答2: Zuul是一个用于构建微服务架构的边缘服务网关,可以对外提供API访问,并且可以对请求进行路由、过滤和负载均衡等操作。当Zuul返回"missing authorization header"错误时,通常是由于请求的认证头信息缺失导致的。 在使用Zuul作为网关时,通常需要对请求进行身份认证和授权操作,这就需要在请求头中包含相应的认证信息。例如在使用OAuth2协议进行认证时,通常会在请求头的"Authorization"字段中携带访问令牌(access token)。如果请求没有包含正确的认证信息或者请求头中没有"Authorization"字段,Zuul将会返回"missing authorization header"错误。 要解决这个问题,需要确保请求头中包含正确的认证信息。可以通过在请求头中添加"Authorization"字段,并且在其值中包含正确的认证信息,如访问令牌。另外,还需要检查认证服务是否正常运行,以及身份认证的配置是否正确。 此外,"missing authorization header"错误还可能是请求没有通过Zuul的预定义过滤器进行身份认证导致的。在使用Zuul时,可以通过编写自定义的过滤器来对请求进行更详细的处理,包括身份认证与授权等。如果自定义的过滤器没有正确处理认证相关的逻辑,也可能导致该错误的出现。 总之,"missing authorization header"错误是由于请求中缺少认证头信息引起的,要解决此问题,需要确保请求头中包含正确的认证信息,并且认证服务配置正确。另外,还需要确保通过Zuul的预定义过滤器或编写的自定义过滤器进行了正确的身份认证处理。 ### 回答3: Zuul 返回“missing authorization header”通常是由于请求中缺少授权头(Authorization Header)导致的错误。 在网络通信中,授权头是用于身份验证和授权的一种机制。当客户端发送请求时,需要在请求头中包含一个特定格式的授权头,以告诉服务器该请求的合法性和权限。然而,如果请求中缺少这个授权头,服务器就无法验证该请求的合法性,因此返回“missing authorization header”错误信息。 要解决这个问题,需要确保请求中包含正确的授权头。具体而言,需要按照特定的规范向请求头中添加包含正确授权信息的授权头。例如,在使用基于令牌的身份验证机制时,可以在请求头的 Authorization 属性中添加类似于 "Bearer xxxxx" 的令牌信息,其中 "xxxxx" 是有效的访问令牌。 此外,还需要确保授权头的格式和内容正确无误。不同的身份验证机制有不同的授权头格式要求,需要按照这些规范来设置授权头。如果格式错误或内容不正确,服务器也会返回“missing authorization header”错误。 综上所述,要解决 Zuul 返回“missing authorization header”错误,需要检查请求中是否含有正确的授权头,并确保授权头的格式和内容符合身份验证机制的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

把烂笔头举起来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值