Page 488 - MDP2022-3
P. 488
.build()
.parseClaimsJws(token)
.getBody();
Collection<? extends GrantedAuthority> authorities =
Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(","))
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
User principal = new User(claims.getSubject(), "", authorities);
return new UsernamePasswordAuthenticationToken(principal, token, authorities);
}
public boolean validateToken(String token) {
try {
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
return true;
} catch (io.jsonwebtoken.security.SecurityException | MalformedJwtException e) {
log.info("잘못된 JWT 서명입니다.");
} catch (ExpiredJwtException e) {
log.info("만료된 JWT 토큰입니다.");
} catch (UnsupportedJwtException e) {
log.info("지원되지 않는 JWT 토큰입니다.");
} catch (IllegalArgumentException e) {
log.info("JWT 토큰이 잘못되었습니다.");
}
return false;
}
public Boolean validateRefreshToken(String refreshToken){
try{
Jws<Claims> claims =
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(refreshToken);
// refresh 토큰 만료가 안됬으면 새로운 access 토큰 생성.
if(!claims.getBody().getExpiration().before(new Date())){
log.info("액세스 토큰 재생성");
}
return Boolean.TRUE;
}
catch (Exception e){
// refresh 토큰이 만료된 경우, 로그인이 필요.
log.info("재로그인 필요");
return Boolean.FALSE;
}