기존의 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
복사