본문 바로가기
Project/모면

[Spring Boot] 개인 정보가 담긴 Jwt 토큰 발급 후 Cookie로 반환하기

by 독서왕뼝아리 2023. 4. 4.

 

oAuthService에 Jwt 토큰을 발급하는 메서드를 추가했다.

public String generateJwtToken(MemberInfoDto info) {
    Map<String, Object> payloads = new HashMap<>();
    Map<String, Object> headers = new HashMap<>();

    headers.put("alg", "HS256");
    headers.put("typ", "JWT");
    payloads.put("name",info.getName());
    payloads.put("picture", info.getPicture());
    payloads.put("oauthId",info.getSub());

    return Jwts.builder()
            .setHeader(headers)
            .setClaims(payloads)
            .setIssuedAt(new Date(System.currentTimeMillis()))
            .setExpiration(new Date(System.currentTimeMillis()+60*1000*60))
            .signWith(SignatureAlgorithm.HS256, secretKey)
            .compact();
}
  1. setIssuedAt : 발행 시간
  2. setExpiration : 토큰 만료 시간

 

 

@Test
void testJwtTokenExpiration() {
    String jwt = Jwts.builder()
            // 토큰 빌드...
            .compact();

    Date expiration = Jwts.parser()
            .setSigningKey(key.getBytes())
            .parseClaimsJws(jwt)
            .getBody()
            .getExpiration();

    assertThat(expiration.after(new Date(System.currentTimeMillis()))).isTrue();
    assertThat(expiration.before(new Date(System.currentTimeMillis()))).isFalse();
}

테스트를 통해 위처럼 만료되었는지 확인하면 된다.

 

 

 

컨트롤러 코드도 다음과 같이 변경했다.

@GetMapping("callback/google")
public ResponseEntity<MemberInfoDto> successGoogleLogin(
        @RequestParam("code") String accessCode,
        HttpServletResponse response
) {
    MemberInfoDto result = oAuthService.getGoogleOAuthMemberInfo(accessCode);
    String accessToken = oAuthService.generateJwtToken(result);

    Cookie cookie = new Cookie("access_token",accessToken);
    cookie.setMaxAge(60*60*24*7);
    cookie.setHttpOnly(true);
    cookie.setPath("/");

    response.addCookie(cookie);

    return ResponseEntity.ok().body(result);
}

 

 

 

해독도 정상적으로 되고

 

 

응답에 쿠키가 제대로 추가된 것을 확인할 수 있다!

 

아주 나이스 (*ᴗ͈ˬᴗ͈)ꕤ*.゚