java - 为什么缺少授权 header ?

标签 java authentication jwt microservices

我有 Eureka 和连接的服务 Zuul:8090AuthService:[any_port]

我向 Zuul 发送 ../login 请求,他发送给 AuthSercice。然后AuthSerice放入Header JWT Authentication中。

@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
    String token = Jwts.builder()
            .setSubject( ((User) authResult.getPrincipal()).getUsername())
            .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
            .signWith(SignatureAlgorithm.HS512, SECRET)
            .compact();

    response.addHeader("Authorization", "Bearer "+ token); // this is missing
    response.addHeader("Authorization2", "Bearer " + token); // ok
}

我向 postman 提出请求。 Request result

首先,我尝试在 Monoliths 中使用 JWT。没有任何问题,可以添加Authorization Token。

为什么缺少授权 header ?

最佳答案

这是因为 Zuul 内置了一个机制——它会自动过滤掉敏感 header,例如 AuthorizationCookies,以保护敏感信息不被转发到下游服务。 这就是为什么您无法获取名为 Authorization 的 header 。

如果您希望下游服务接收它们,只需在 Zuul 配置文件中自行定义过滤器,而不是使用默认值。

 zuul:
  routes:
    users:
      path: your url pattern
      sensitiveHeaders: //put nothing here!! leave it blank, the filter will be off
      url: downstream url

这里是spring官方对敏感 header 的解释:document

关于java - 为什么缺少授权 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53351154/

相关文章:

angularjs - Django Rest Framework JWT : How to change the token expiration time when logged in

php - HTTP 基本身份验证与 key

kotlin - 我如何在其中传递 onClick 参数?

java - 如何将以下程序的十六进制转换为字节?

Java 列表中不兼容的等式约束

wpf - WPF MVVM Prism 中基于ASP.net的基于表单的身份验证

jwt - 如何在 clojurescript 中解码 JSON Web token ?

angular - 刷新 token 时,AuthGuard 服务 canActivate 不导航

java - 有没有办法使用 jdk.internal.access.SharedSecrets 从 java.util 包访问包私有(private) String.isLatin1() ?

Java:作为控制流的异常?