【发布时间】: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