[Spring] 쿠키(Cookie) 다루기

White 와잇·2024년 6월 19일

Spring

목록 보기
5/9
post-thumbnail

쿠키(Cookie) 다루기

개요

Java Spring 환경에서 웹 쿠키를 생성하고 클라이언트와 주고받는 방법을 잊지 않기 위해 기록한다.


쿠키 생성 후 클라이언트에게 전송

예시코드

@RestController
public class AuthController {

    public String AUTHORIZATION_HEADER = "Authorization";

    @GetMapping("/create-cookie")
    public String createCookie(HttpServletResponse res) {
    	String cookieValue = "User Auth";
        try {
            cookieValue = URLEncoder.encode(cookieValue, "utf-8").replaceAll("\\+", "%20");
            
            // 쿠키 생성
            Cookie cookie = new Cookie(AUTHORIZATION_HEADER, cookieValue);
            cookie.setPath("/");
            cookie.setMaxAge(30 * 60);

            // 쿠키 세팅
            res.addCookie(cookie);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e.getMessage());
        }
        return "Create cookie";
    }
    
    ...
}

추가 설명

  • 쿠키 생성 시, new Cookie(이름, 값)으로 설정한다.
  • 쿠키에 넣을 값은 공백 문자(' ')가 불가능하다. URL 인코딩 작업이 필요하다.
  • 쿠키를 생성하고 그 쿠키의 만료기한 등 설정값을 세팅할 수 있다.
  • 서블릿으로부터 받은 (=컨트롤러 매개변수로 받은) HttpServletResponse 객체에 쿠키를 세팅하여야 한다.

클라이언트가 API 요청 시 보낸 쿠키 읽기

예시코드1

@RestController
public class AuthController {

    public String AUTHORIZATION_HEADER = "Authorization";

	...
    
    @GetMapping("/get-cookie")
    public String getCookie(HttpServletRequest req) {
        Cookie[] cookies = req.getCookies();
    	if(cookies != null) {
        	for (Cookie cookie : cookies) {
            	if (cookie.getName().equals(AUTHORIZATION_HEADER)) {
                	try {
                    	return "Get Cookie: " + URLDecoder.decode(cookie.getValue(), "UTF-8");
                	} catch (UnsupportedEncodingException e) {
                    	return "Fail";
                	}
            	}
        	}
            return "Cannot find auth Cookie";
    	}
        return "No exist Cookies";
    }
}

설명

  • 서블릿으로부터 받은 HttpServletRequest 객체로부터 요청한 클라이언트의 쿠키를 얻을 수 있다.
  • 클라이언트의 쿠키는 여러 개일 수 있으므로 배열로 받은 후 쿠키 이름(Name)으로 필요한 쿠키를 찾는다.
  • URL 인코딩 문자열을 원래 캐릭터셋으로 디코딩한다.

예시코드2

@RestController
public class AuthController {

    public String AUTHORIZATION_HEADER = "Authorization";

	...
    
    @GetMapping("/get-cookie")
    public String getCookie(@CookieValue(AUTHORIZATION_HEADER) String value) {
        return "Get Cookie: " + value;
    }
}

설명

  • API 요청을 받는 Controller 레이어에서 가능한 간단한 방법
  • @CookieValue 애너테이션으로 쿠키 이름으로 쿠키 값을 바로 받을 수 있음
profile
웹개발 도전! 데브옵스 도전!

0개의 댓글