인터넷 자료나 강의를 보면 대부분 꽤 지난 버전을 다루는 경우가 많다. 그리고 특히 사용법이 바뀐 시점에서는 자료가 많이 없기 때문에 직접 공식문서나 구글링을 열심히 하면서 사용법을 익혀야 한다. JWT도 마찬가지로 예전과는 사용법이 달라져서 최신버전을 사용하려면 새로운 방식으로 기존의 코드를 변경해야 한다. 나도 강의를 듣다가 기존의 코드를 새롭게 바꿔야 하는 경우를 맞닥뜨려서 새로운 버전에 맞춰 코드를 변경하기로 했다.
생성
byte[] secretKey = Base64.getEncoder().encode(environment.getProperty("token.secret").getBytes());
String token = Jwts.builder()
.setSubject(userDto.getUserId())
.setExpiration(new Date(System.currentTimeMillis() +
Long.parseLong(environment.getProperty("token.expiration_time"))))
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
ㄴ 이전 방식
Key secretKey = new SecretKeySpec(Base64.getEncoder().encode(environment.getProperty("token.secret").getBytes()),
Jwts.SIG.HS256.key().build().getAlgorithm());
String token = Jwts.builder()
.subject(userDto.getUserId())
.expiration(new Date(System.currentTimeMillis() +
Long.parseLong(environment.getProperty("token.expiration_time"))))
.signWith(secretKey)
.compact();
ㄴ Deprecated 수정
subject와 expiration은 그냥 메서드명만 변경하면 되지만 signWith는 오버로딩된 메서드들 대부분이 Deprecated 되었기 때문에 java.security.Key를 매개변수로 받는 메서드를 사용하였다. 그래서 secret 키의 경우 기존의 byte[]에서 Key로 변경하였다.
검증
byte[] secretKeyBytes = Base64.getEncoder().encode(environment.getProperty("token.secret").getBytes());
SecretKey secretKey = new SecretKeySpec(secretKeyBytes, Jwts.SIG.HS256.key().build().getAlgorithm());
try {
JwtParser jwtParser = Jwts.parser()
.verifyWith(secretKey)
.build();
subject = jwtParser.parseSignedClaims(jwt).getPayload().getSubject();
log.info("subject: " + subject);
} catch (Exception ex) {
returnValue = false;
}
ㄴ Deprecated 수정
기존의 코드를 남겨놓지 않고 수정하는 바람에 기존의 코드는 없어졌다... 어차피 나중에 다시 사용하진 않을거 같다.
jwtParser.parseSignedClaims()를 이용하여 subject를 구하는 방식이 변경된 부분이다. 여기서도 키가 필요해서 SecretKeySpec을 이용해서 새로운 키를 만들었다.
'공부 > Spring Security' 카테고리의 다른 글
| [Spring Security] OAuth2UserService enum을 이용해서 리팩토링하기 (0) | 2024.10.12 |
|---|---|
| [Spring Security] 로그인 후 로그인 페이지 접속 막기 (0) | 2024.03.24 |
| [Spring Security] Filter 인증 구조에 대해서 깨달은 점 (0) | 2024.01.17 |
| [Spring Security] CSRF 설정하기 (0) | 2024.01.10 |
| [Spring Security] 원하는 Filter 만들어서 사용하기 (0) | 2024.01.09 |