Backend
home

JWT 토큰 (최신 버전으로 작성된 코드 정리)

생성 일시
2025/01/22 06:16
태그
SpringBoot
게시일
2025/01/22
최종 편집 일시
2025/02/09 13:26
기존의 JWT 토큰과 다르게 적용되는 코드 내용에 대한 정리
예전에는 set을 앞에다 붙여서 코드를 작성했다면 지금은 작성하지 않는다.
과거
private String makeToken(Date expiry, User user) { Date now = new Date(); return Jwts.builder() .setHeaderParam(Header.TYPE, Header.JWT_TYPE) // 헤더 typ : JWT // 내용 iss : codesche@gmail.com(yml 파일에서 설정한 값) .setIssuer(jwtProperties.getIssuer()) .setIssuedAt(now) // 내용 iat : 현재 시간 .setExpiration(expiry) // 내용 exp : expiry 멤버 변수값 .setSubject(user.getEmail()) // 내용 sub : 유저 이메일 .claim("id", user.getId()) // 클레임 id : 유저 ID // 서명 : 비밀값과 함께 해시값을 HS256 방식으로 암호화 .signWith(SignatureAlgorithm.HS256, jwtProperties.getSecretkey()) .compact(); }
Java
복사
현재
// JWT 토큰 생성 메서드 private String makeToken(User user, Date expiredDate) { String token = Jwts.builder() .header().add("typ", "JWT") // JWT의 타입을 명시 .and() .issuer(jwtProperties.getIssuer()) // 발행자 정보 설정 .issuedAt(new Date()) // 발행일시 설정 .expiration(expiredDate) // 만료시간 설정 .subject(user.getEmail()) // 토큰의 주제(Subject) 설정 _ 사용자 이메일 .claim("id", user.getId()) .claim("role", user.getRole().name()) .signWith(getSecretKey(), Jwts.SIG.HS256) // 비밀키와 해시 알고리즘 사용하여 토큰 설명값 설정 .compact(); // 토큰 정보들을 최종적으로 압축해서 문자열로 반환 log.info("[makeToken] 완성된 토큰 : {}", token); return token; }
Java
복사
유효성 검증 관련된 코드 작성도 다음과 같이 한다.
과거
public boolean validToken(String token) { try { Jwts.parser() .setSigningKey(jwtProperties.getSecretkey()) // 비밀값으로 복호화 .parseClaimsJws(token); return true; } catch (Exception e) { // 복호화 과정에서 에러가 나면 유효하지 않은 토큰 return false; } }
Java
복사
현재
// JWT 토큰 유효성 검증 메서드 public boolean validToken(String token) { log.info("[validToken] 토큰 검증을 시작합니다."); try { Jwts.parser(). verifyWith(getSecretKey()) // 비밀키로 서명 검증 .build() .parseSignedClaims(token); // 서명된 클레임을 파싱.. log.info("[validToken] 토큰 검증 통과."); return true; } catch (Exception e) { e.printStackTrace(); } log.info("[validToken] 토큰 검증 실패."); return false; }
Java
복사