본문 바로가기

개발일지

20231212 - JWT를 Header가 아닌 Cookie로 반환하기

 

JWT를 이용해 인증을 하는 프로젝트에서 포스트맨으로 기능테스트를 해보던 중 응답헤더에서 받은 토큰을 다시 요청헤더에 넣고 요청을 보내는 과정이 여러 번 지속되니 상당히 번거롭기 시작했다. 그래서 토큰을 쿠키로 반환할 경우 포스트맨에서도 자동으로 쿠키로 등록되어 이런 번거로운 과정을 없앨 수 있었다.

 

 public void addJwtToCookies(String token, HttpServletResponse response){
        try{
            token = URLEncoder.encode(token,"utf-8").replaceAll("\\+","%20");

            Cookie cookie = new Cookie(AUTHORIZATION_HEADER,token);
            cookie.setPath("/");

            response.addCookie(cookie);
        } catch (UnsupportedEncodingException e){
            logger.error(e.getMessage());
        }
    }

 

위의 코드는 Jwt를 쿠키에 추가하는 메서드다. 생성된 토큰을 URLEncoder로 인코딩해주고 Name에는 AUTHORIZATION_HEADER의 값이 Value에는 token 값이 들어가게 된다. 그리고 HttpServletResponse객체에 쿠키를 담아준다.

public LoginResponseDto login(LoginRequestDto requestDto, HttpServletResponse response) {
        String email = requestDto.getEmail();
        String password = requestDto.getPassword();
        ...
        
        jwtUtil.addJwtToCookies(jwtUtil.createToken(user.getEmail(),user.getUserRole()),response);
		
        return ...;
}

 

서비스단에서 해당 메서드를 통해 쿠키에 토큰을 담는 행위를 실행한다.

그리고 포스트맨에서 요청을 보내면 자동으로 쿠키가 등록되는것을 확인할 수 있다.