У меня проблема с утверждениями, я хочу сгенерировать токен с разрешениями пользователей для перехвата всех маршрутов и блокировки, если не авторизован.
Я использую Jwt clams для аутентификации.
Myвалидатор
public User validate(String token) {
User user = null;
try {
Claims body = Jwts.parser()
.setSigningKey(JwtGenerator.getSecret())
.parseClaimsJws(token)
.getBody();
user = new User();
user.setUsername(body.getSubject());
user.setId(Integer.parseInt((String) body.get("userID")));
user.setPermissions((ArrayList<Permission>) body.get("permission"));}
мой генератор
public String generate(User user) {
Claims claims = Jwts.claims()
.setSubject(user.getUsername());
claims.put("userID", String.valueOf(user.getId()));
claims.put("changePassword", user.isChangePass());
claims.put("permission", user.getPermissions()); //List<Permission>
return Jwts.builder()
.setClaims(claims).signWith(SignatureAlgorithm.HS512, SECRET).compact();
}
повторение
user.getPermissions().forEach(permission -> System.out.println(permission.getRoute()));
ОШИБКА
java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class com.bestgame.model.Permission (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; com.bestgame.model.Permission is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @6b8da817)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at com.bestgame.security.AuthorizationUser.checkPermissions(AuthorizationUser.java:22)
at com.bestgame.security.BgsAuthenticationTokenFilter.successfulAuthentication(BgsAuthenticationTokenFilter.java:41)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:240)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at