반응형
1. 관리 클래스 생성
@Slf4j
@Component
public class JwtProvider {
private static final String JWT_SECRET_KEY = "사용할 비밀 키";
private static final int JWT_EXPIRATIONMS = 86400000; // ms 세컨드 단위로 사용 시간 설정 가능 합니다.
// jwt 키 생성 여기서 지정된 값을 가지고 유저를 체크합니다.
public String generateJwtToken(String name) {
return Jwts.builder().setSubject(name).setIssuedAt(new Date()).setExpiration(new Date((new Date()).getTime() + JWT_EXPIRATIONMS)).signWith(SignatureAlgorithm.HS512, JWT_SECRET_KEY).compact();
}
// jwt 키에서 인코딩 전에 지정한 값을 추출하는 로직입니다.
public String getUserNameFromJwtToken(String token) {
return Jwts.parser().setSigningKey(JWT_SECRET_KEY).parseClaimsJws(token).getBody().getSubject();
}
// jwt 키가 유효한지 확인하는 로직입니다.
public boolean validateJwtToken(String authToken) {
try {
Jwts.parser().setSigningKey(JWT_SECRET_KEY).parseClaimsJws(authToken);
return true;
} catch (SignatureException e) {
log.error("Invalid JWT signature: {}", e.getMessage());
} catch (MalformedJwtException e) {
log.error("Invalid JWT token: {}", e.getMessage());
} catch (ExpiredJwtException e) {
log.error("JWT token is expired: {}", e.getMessage());
} catch (UnsupportedJwtException e) {
log.error("JWT token is unsupported: {}", e.getMessage());
} catch (IllegalArgumentException e) {
log.error("JWT claims string is empty: {}", e.getMessage());
}
return false;
}
// jwt 토큰의 유효 시간을 강제로 만료 시킵니다.
// logout에 사용하기 위해 만들었습니다.
public void expireJwtToken(String authToken) {
getAllClaimsFromToken(authToken).setExpiration(new Date());
}
// jwt 토큰의 값을 디코딩 합니다.
private Claims getAllClaimsFromToken(String authToken) {
return Jwts.parser().setSigningKey(JWT_SECRET_KEY).parseClaimsJws(authToken).getBody();
}
}
반응형
'Spring Boot > Spring Security' 카테고리의 다른 글
[Spring Security][v5.7+] 설정 정리 (0) | 2022.10.17 |
---|---|
[Spring security + Jwt #1] Spring Security 설정하기 (0) | 2022.02.21 |