#java #jwt
Вопрос:
Я использую jjwt( api "io.jsonwebtoken:jjwt-api:0.11.2"
) для создания веб-токена, это мой код для создания токена JWT:
public static String generateTokenByClaim(Claims claims, Date expireDate) { SecretKey secretKey = new SecretKeySpec(JWT_SIGN_KEY.getBytes(), SignatureAlgorithm.HS256.getJcaName()); String accessToken = Jwts.builder().setClaims(claims) .setExpiration(expireDate) .signWith(secretKey).compact(); return accessToken; }
когда я попытался получить информацию о претензии, подобную этой:
public static Claims getClaimFromToken(String token) { return Jwts.parserBuilder().setSigningKey(JWT_SIGN_KEY.getBytes()).build() .parseClaimsJws(token).getBody(); }
показывает такую ошибку:
Suppressed: io.jsonwebtoken.security.SignatureException: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted. at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:420) ~[jjwt-impl-0.11.2.jar!/:0.11.2] Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Error has been observed at the following site(s): *__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ HTTP GET "/music/songs/v1/jump/475597470" [ExceptionHandlingWebHandler] Original Stack Trace: at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:420) ~[jjwt-impl-0.11.2.jar!/:0.11.2] at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:550) ~[jjwt-impl-0.11.2.jar!/:0.11.2] at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:610) ~[jjwt-impl-0.11.2.jar!/:0.11.2]
Я уверен, что код отлично работает в течение одного года, пока недавно я не обновил версию spring boot.почему это должно было произойти? Что мне следует сделать, чтобы устранить эту проблему?