简体   繁体   English

无法从Spring Boot微服务模块中的Zuul标头获取JWT令牌

[英]Cannot get JWT Token from Zuul Header in Spring Boot Microservice Module

I have tried to send JWT Token in Zuul Header to another microservice module. 我试图将Zuul Header中的JWT令牌发送到另一个微服务模块。 Each Time request goes from zuul to another module but. 每个时间请求从zuul转到另一个模块。 I always get null header in another module. 我总是在另一个模块中获得空标题。 But I obtain token in zuul server from auth server but it never reaches to another module. 但是我从身份验证服务器在zuul服务器中获取令牌,但是它从未到达另一个模块。

public class JwtTokenAuthenticationFilter extends OncePerRequestFilter {

private final JwtConfig jwtConfig;

public JwtTokenAuthenticationFilter(JwtConfig jwtConfig) {
    this.jwtConfig = jwtConfig;
}


private static final int FILTER_ORDER = 0;
private static final boolean SHOULD_FILTER = true;
private static final Logger logger = LoggerFactory.getLogger(AuthenticationFilter.class);


@Override
protected void doFilterInternal(HttpServletRequest request1, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {

    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();

    String header = request1.getHeader(jwtConfig.getHeader());

    if (header == null || !header.startsWith(jwtConfig.getPrefix())) {
        chain.doFilter(request1, response);
        return;
    }

    /*   new token getting code*/
    String token = header.replace(jwtConfig.getPrefix(), "");


    try {
        Claims claims = Jwts.parser()
                .setSigningKey(jwtConfig.getSecret().getBytes())
                .parseClaimsJws(token)
                .getBody();

        String username = claims.getSubject();

        System.out.println(username);

        if (username != null) {
            @SuppressWarnings("unchecked")
            List<String> authorities = (List<String>) claims.get("authorities");
            UsernamePasswordAuthenticationToken auth =
                    new UsernamePasswordAuthenticationToken(
                            username,
                            null, authorities.stream().map(
                            SimpleGrantedAuthority::new
                    ).collect(Collectors.toList()));

            SecurityContextHolder.getContext().setAuthentication(auth);

        }
    } catch (Exception e) {
        SecurityContextHolder.clearContext();
    }


    System.out.println(String.format("%s request to %s", request1.getMethod(), request1.getRequestURL().toString()));
    /*   return null;*/

    request1.setAttribute("header",token);

    chain.doFilter(request1, response);


}

}

在zuul的application.properties中,应添加zuul.sensitiveHeaders=Cookie,Set-Cookie

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Spring Boot微服务Zuul未运行 - Spring boot microservice Zuul is not running 在Spring Boot微服务的JWT令牌中添加多个声明 - Adding multiple claims In JWT token in Spring Boot microservice 从 JWT 令牌获取 Spring Boot 资源服务器中的主体 - Get principal in Spring Boot resource server from JWT token Spring Boot + Zuul:如何从RESTful服务提供的文件流中获取“ Content-length”标头? - Spring Boot + Zuul: how to get the “Content-length” header from a file stream provided by RESTful services? 如何从 java spring 启动中的请求的 header 获取不记名令牌? - How to get bearer token from header of a request in java spring boot? 如何在Spring Boot中从旧令牌生成新的JWT令牌? - How to generate new JWT token from old token in Spring Boot? 从 spring 引导中的 jwt 获取附加属性 - get additional attributes from jwt in spring boot 从弹簧启动生成jwt令牌以进行角度应用 - generate jwt token from spring boot for an angular application Spring Boot 2.0.4 + OAuth2 + JWT-无法获取访问令牌,返回405或仅被映射到localhost:8080 / - Spring Boot 2.0.4 + OAuth2 + JWT - Cannot get Access Token, returns 405 or just gets mapped into localhost:8080/ 如何从微服务获取http响应状态码-zuul [java] - How to get http response status code from microservice - zuul [java]
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM