【问题标题】:JWT getHeader return nullJWT getHeader 返回 null
【发布时间】:2018-09-25 12:23:12
【问题描述】:

当我发送一个令牌时它可以工作,但是当我发送一个接收数据的请求时,函数 getheader() 返回 null。

public class JWTAuthorizationFilter extends OncePerRequestFilter{

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

    //recuperer de la requete envoyer dans jwt le header du token
    String jwt =request.getHeader(SecurityConstants.HEADER_STRING);
    System.out.println("authori");
    System.out.println(jwt);
    if(jwt==null ) {
        //faire le filtre 
        filterChain.doFilter(request, response);
        return;
    }
    Claims claims=Jwts.parser()
            .setSigningKey(SecurityConstants.SECRET)//signer avec le secret
            //parser et remplace le TOKEN_PREFIX par chaine vide
            .parseClaimsJws(jwt.replaceAll(SecurityConstants.TOKEN_PREFIX, ""))
            //recuper le corps du token
            .getBody();

     String username =claims.getSubject();
     //returne tableau d'objet qui contient les roles du user
     ArrayList<Map<String,String>> roles=(ArrayList<Map<String,String>>) claims.get("role");
     Collection<GrantedAuthority> authorities=new ArrayList<>();
     //parcourire et recuperer les role de mon token
     roles.forEach(r->{
        authorities.add(new SimpleGrantedAuthority(r.get("authority"))); 
     });
     //mettre dans authenticatedUserToken le nom et authoriter d'un utilisateur authentifier dans le token 
     UsernamePasswordAuthenticationToken  authenticatedUserToken=
             new UsernamePasswordAuthenticationToken(username,null,authorities);
     //charger l'identiter dans le context de l'application
     SecurityContextHolder.getContext().setAuthentication(authenticatedUserToken);
     filterChain.doFilter(request, response);
    } 

}

这是来自安全配置

http.addFilter(new JWTAuthenticationFilter(authenticationManager()))

    .addFilterBefore(new JWTAuthorizationFilter(),UsernamePasswordAuthenticationFilter.class);

我在这里发送了身份验证,一切正常,我得到了我的令牌:

我在这里尝试获取服务:

JWTAuthorization 中的测试控制台显示我调用resquest.getHeader()的位置

【问题讨论】:

  • 在您的 Authorization 标头中,bearer 和令牌之间应该有一个空格。在你的截图中我看到bearereyJh....,而不是bearer eyJh....
  • 我添加了空间,但它没有给出任何你不知道的任何其他可以解决我的问题的方法,谢谢

标签: rest api spring-boot jwt


【解决方案1】:

在您的端点中,http://localhost:8080/tasks 似乎正在使用 JWT 进行身份验证(它被正确传递并经过身份验证)。

./tasks 的响应标头不应在其响应中包含标头“授权”...我不明白为什么您在身份验证后需要此标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 2016-07-14
    • 2021-01-22
    • 1970-01-01
    • 2018-12-09
    • 2019-01-27
    • 2017-03-27
    • 2013-06-14
    相关资源
    最近更新 更多