@Component
public class JwtTokenProvider {
@Value("${petapp.app.secret}")
private String APP_SECRET;
@Value("${petapp.expires.in}")
private Long EXPIRES_IN;
public String generateJwtToken(Authentication auth){
JwtUserDetails userDetails = (JwtUserDetails) auth.getPrincipal();
Date expireDate = new Date(new Date().getTime() + EXPIRES_IN);
return Jwts.builder().setSubject(Long.toString(userDetails.getId()))
.setIssuedAt(new Date()).setExpiration(expireDate)
.signWith(SignatureAlgorithm.HS512, APP_SECRET).compact();
}
Long getUserIdFromJwt(String token){
Claims claims = Jwts.parser().setSigningKey(APP_SECRET).build().parseSignedClaims(token).getBody();
return Long.parseLong(claims.getSubject());
}
boolean validateToken(String token){
try{
Jwts.parser().setSigningKey(APP_SECRET).build().parseSignedClaims(token);
return !isTokenExpired(token);
}catch(SignatureException | MalformedJwtException | ExpiredJwtException | UnsupportedJwtException |
IllegalArgumentException e){
return false;
}
}
private boolean isTokenExpired(String token) {
Date expiration = Jwts.parser().setSigningKey(APP_SECRET).build().parseSignedClaims(token).getBody().getExpiration();
return expiration.before(new Date());
}
}
我正在尝试创建一个用于登录和注册我的应用程序的身份验证系统。我正在使用旧资源来制作此代码部分。我可以注册成功,但无法登录系统。
在新版本的依赖项中,他们基本上放弃了
set
。所以而不是
Jwts.builder().setSubject(Long.toString(userDetails.getId()))
.setIssuedAt(new Date()).setExpiration(expireDate)
.signWith(SignatureAlgorithm.HS512, APP_SECRET).compact();
您使用:
Jwts.builder().subject(Long.toString(userDetails.getId()))
.issuedAt(new Date()).expiration(expireDate)
.signWith(Keys.hmacShaKeyFor(APP_SECRET.getBytes())).compact();
来自我的一个演示项目的 github 链接,作为进一步的资源。