У меня есть метод, который пытается извлечь информацию из токена Jwt для создания экземпляра UserDetails из. Метод выглядит так:
public UserDetails loadUserByAuthToken(String authToken){
Claims claims = getClaimsFromToken(authToken);
return JwtUserFactory.create(
claims.get(CLAIM_KEY_USER_ID, Long.class),
....
Collection<? extends GrantedAuthority>claims.get(CLAIM_KEY_GRANTED_AUTHORITIES, Collection.class),
);
Несмотря на явное преобразование значения списка из CLAIM_KEY_GRANTED_AUTHORITIES
в (List<GrantedAuthority>)
, он по-прежнему преобразует список в связанную хэш-карту.
Я читал здесь что, когда тип не определен, Джексон автоматически преобразует список в связанную хэш-карту. Resteasy преобразование List в LinkedHashMap Тема посвящена resteasy, но я думаю, что то же самое происходит в моем коде. В этом потоке Исключение приведения класса в JWT Я читал, что Джексон также используется для определения типов данных при извлечении данных из токена jwt.
Дело в том, что я объявляю тип , а именно List.class
. Это как указано c, потому что List<GrantedAuthority>.class
приводит к ошибке компиляции. Когда я записываю содержимое списка в консоль, оно выглядит так:
[{authority=ROLE_USER}, {authority=ROLE_ADMIN}]
Как я могу предотвратить неявное преобразование Джексоном GrantedAuthorityList в список LinkedHashMap и избежать класса исключение cast?
Я использую версию jjwt 0.9.0
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
Спасибо
РЕДАКТИРОВАТЬ: Вот метод getClaimsFromToken
public Claims getClaimsFromToken(String token) {
Claims claims;
try {
claims = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
} catch (Exception e) {
e.printStackTrace();
claims = null;
}
return claims;
}