secret key 생성할 때마다 매번 까먹고 검색하기도 지침
build.gradle에 jwt 의존성 추가.
compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'
jwtUtil.class : hs256 base64 로 설정(개발자 임의 설정 가능)
@Value("${jwt.secret.key}")
private String secretKey;
private Key key;
private final SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; //hs256
@PostConstruct
public void init() {
byte[] bytes = Base64.getDecoder().decode(secretKey);
key = Keys.hmacShaKeyFor(bytes);
}
Terminal : base64의 64비트로 함 32비트도 가능한데, 비트 수가 높을수록 보안성이 높아짐.
application.properties
jwt.secret.key = 0ydHRc8EG9P/RJDjjPbE8dezJ0IXc8z61Y7hDZRJKkkrDW81g9FPKb0XdU5Knun3kIBEabqtzGnsNSqbufv79g==
사이트에서 가져오기 (HS256 대칭키만 가능)
여기서 CodeIgniter Encryption Keys - Can be used for any other 256-bit key requirement 에서 복붙하면 됨.
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
private static final String SECRET_KEY = "your-secret-key"; // 적절한 키로 변경
public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username) // 사용자 정보 저장
.setIssuedAt(new Date()) // 발급 시간
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60)) // 1시간 유효
.signWith(SignatureAlgorithm.HS256, SECRET_KEY) // 서명
.compact();
}
}
...
String token = JwtUtil.generateToken("testUser");