프로그램/JAVA

[JAVA] SpringBoot에서 JWT 설정 및 사용하기 (JJWT)

프뚜 2022. 12. 27. 10:00
728x90
반응형
SMALL

안녕하세요! 프뚜입니다.

 

이전에 JWT 관련해서 포스팅했지만, 내용이 부족하고 소스가 없는 관계로 자세한 설명과 소스를 첨부하려고 합니다.

 

[JWT] 토큰 환경 설정 및 생성

[JWT] 토큰 인증 및 payload 확인


[개발 환경]

 - OS: Windows 10 64bit

 - JAVA: 1.8


# build.gradle 설정하기

// 2022.12.15[프뚜]: JWT
implementation("io.jsonwebtoken:jjwt:0.9.1")
implementation('javax.xml.bind:jaxb-api:2.4.0-b180830.0359')

# application.properties에 secretKey 넣기

# 2022.12.15[프뚜]: token key 유실 X
pddu.jwt.key=pddu

키가 변경되면 이전에 발행된 token은 사용할 수 없습니다.


# init 메소드에 key 값 세팅하기

@Value("${pddu.jwt.key}")
private String secretKey;
private SignatureAlgorithm signatureAlgorithm;
private Key signingKey;

@PostConstruct
private void init() throws Exception {
    // 2022.12.15[프뚜]: 암호화 기법 설정
    signatureAlgorithm = SignatureAlgorithm.HS512;

    // 2022.12.15[프뚜]: 암호키 설정(보안으로 인해 프로퍼티에 설정)
    byte[] secretKeyBytes = DatatypeConverter.parseBase64Binary(secretKey);
    signingKey = new SecretKeySpec(secretKeyBytes, signatureAlgorithm.getJcaName());
}

@PostConstruct를 사용해서 init 지점을 실행합니다.


# JWT Token 생성하기

public String create() throws Exception {
    // 2022.12.15[프뚜]: body에 넣을 값 생성
    Map<String, Object> body = new HashMap<>();
    body.put("name", "pddu");
    body.put("birth", "0801");
    body.put("hobby", "coding");

    // 2022.12.15[프뚜]: 1시간짜리 토큰 발행
    JwtBuilder builder = Jwts.builder()
            .setClaims(body)
            .signWith(signatureAlgorithm, signingKey)
            .setExpiration(new Date(System.currentTimeMillis() + (3600 * 1000)));
    return builder.compact();
}

토큰에 대한 자세한 내용은 링크를 통해 확인해보실 수 있습니다.


# JWT Token 해석하기

public String check(String token) throws Exception {
    // 2022.12.15[프뚜]: token 해석
    Map<String, Object> body = Jwts.parser()
            .setSigningKey(signingKey)
            .parseClaimsJws(token)
            .getBody();

    return body.toString();
}

발행된 토큰을 해독하는 방법입니다.


# 발행 및 해석 테스트 하기

@Autowired
private JwtService jwtService;

@Test
void create() throws Exception {
    String token = jwtService.create();
    System.out.println("[LOG] 토큰이 발생되었습니다. > " + token);

    String body = jwtService.check(token);
    System.out.println("[LOG] 토큰의 바디 값입니다. > " + body);
}

생성한 토큰의 claim값을 확인할 수 있습니다.


자세한 내용은 소스코드를 통해 확인해보실 수 있습니다. (제목과 Git Comment는 같습니다.)

https://github.com/JeongSeongSoo/spring-tistory

 

GitHub - JeongSeongSoo/spring-tistory

Contribute to JeongSeongSoo/spring-tistory development by creating an account on GitHub.

github.com

728x90
반응형
LIST