Я создаю JWT с моим пользователем и его ролями, в отладке я могу проверить, что это правильно, затем я защищаю свой контроллер, но я получаю ошибку AccessDeniedException, я думаю, это потому, что я не ломаю токен jwt для извлечения претензий я пробовал это, но я получаю другие ошибки --->
private static final String AUTHORITIES_KEY = "auth";
static void addAuthentication(HttpServletResponse res, Authentication authentication) {
String token = Jwts.builder()
.setSubject(authentication.getName())
.setExpiration(new Date(System.currentTimeMillis() + timeout))
.signWith(SignatureAlgorithm.HS512, key)
.claim(AUTHORITIES_KEY, authentication.getAuthorities()) // the rol is "ROLE_Consulta"
.compact();
res.addHeader("Authorization", "Bearer " + token);
}
static Authentication getAuthentication(HttpServletRequest request) {
String token = request.getHeader("Authorization");
if (token != null) {
String user = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(token.replace("Bearer", ""))
.getBody().getSubject();
Claims claims = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(token.replace("Bearer", ""))
.getBody();
Collection authorities = Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(","))
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
return user != null ? new UsernamePasswordAuthenticationToken(user, null, authorities) : null;
}
return null;
}
Я могу создать JWT, и я могу проверить мой JWT, это правильно, но когда я изменяю в своем контроллере:
@Secured("ROLE_Consulta")
Я получаю сообщение об ошибке AccessDeniedException
, но при отладке я вижу свои полномочия var: и я вижу "ROLE_Consulta"