본문 바로가기
Spring Boot/Spring Security

[Spring security + Jwt #2] jwt 관리 클래스 생성

by Lee David 2022. 2. 21.
반응형
반응형
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();
    }
}

 

https://paciencia.tistory.com/40

반응형