Search

Spring boot 3 에서의 JWT 코드 변화

태그
JWT
spring boot 3
분류
Spring Boot

signWith() 의 폐기

오래만에 프로젝트를 진행중, 아래 오랜지색 줄이 나타나서 자세히 봤더니…
signWith 가 폐기되었다고 하네요!

어떻게 수정해야 할까?

문서에서는 아래와 같이 수행 하라고 나와 있습니다.
그래서 아래와 같이 코드를 변경해주었습니다.
@Component @RequiredArgsConstructor @Slf4j public class TokenUtil implements InitializingBean { private final RedisUtil redisUtil; private final UserRepository userRepository; @Value("${secret.key}") private String SECRET_KEY; static final long AccessTokenValidTime = 15 * 60 * 1000L; private Key key; @Override public void afterPropertiesSet() { generateKey(); } private void generateKey() { byte[] keyBytes = SECRET_KEY.getBytes(StandardCharsets.UTF_8); this.key = Keys.hmacShaKeyFor(keyBytes); } public String generateToken(String userId) { if (key == null) { generateKey(); } Claims claims = Jwts.claims().setSubject(userId); Date now = new Date(); String token = Jwts.builder() .setClaims(claims) .setIssuedAt(now) .setExpiration(new Date(now.getTime() + AccessTokenValidTime)) .signWith(key) .compact(); return token; }
Java
복사

 주의

저의 경우, SECRET_KEY 를 단순한 영문자로 저장 했기에 해독과정이 필요 없었습니다. 그래서 byte[] 를 생성하는 부분의 메서드가 다릅니다. 만약 base64 encoding 한 변수가 담겨있다면, 아래 메서드를 사용해주세요.
byte[] keyBytes = Decoders.BASE64.decode(SECRET_KEY);
Java
복사

'parser()' is deprecated

parser() 대신 paserBuilder() 를 사용해주세요!
public Long getUserIdFromToken(String token) { // Remove "Bearer " from accessToken. if (token.contains("Bearer")) { token = token.substring(7); } String userIdFromToken = Jwts.parserBuilder() .setSigningKey(key) .build() .parseClaimsJws(token) .getBody() .getSubject(); Long userId = Long.parseLong(userIdFromToken); log.info("======================================================"); log.info("userId: " + userId); log.info("======================================================"); return userId; }
Java
복사