Spring Boot - Cookie 사용하기

목차

쿠키 생성

스프링에서 쿠키는 Cookie 를 이용해 쉽게 생성할 수 있습니다. 생성한 쿠키를 Client 로 전달하기 위해 컨트롤러 메소드 파라미터로 HttpServletResponse 객체를 추가한 후 HttpServletResponse 객체에 생성한 쿠키를 넣어줍니다.

@GetMapping("/cookie/create")
public ResponseEntity<String> helloCookie(HttpServletResponse httpServletResponse) {
Cookie cookie = new Cookie("helloCookie", URLEncoder.encode("Hello world", StandardCharsets.UTF_8));
httpServletResponse.addCookie(cookie);
return ResponseEntity.ok().body("Create Cookie");
}

쿠키 생성 테스트

@Test
void CookieTest() throws Exception {
ResultActions resultActions = mockMvc.perform(MockMvcRequestBuilders.get("/cookie/create"))
.andExpect(status().isOk())
.andExpect(cookie().exists("helloCookie"))
.andExpect(cookie().value("helloCookie", "Hello+world"))
.andDo(print());
}

TestRestTemplate 을 이용해 어플리케이션에 대한 컨트롤러 테스트를 진행합니다. Client 로 전달된 쿠키는 Response Header 에서 확인할 수 있습니다.

@LocalServerPort
private int port;

@Autowired
private TestRestTemplate restTemplate;

@Test
void helloCookie() {
String url = "http://localhost:" + port + "/cookie/create"; // 테스트할 엔드포인트 URL

// REST API 호출
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);

// 응답 헤더에서 쿠키 정보 가져오기
HttpHeaders headers = response.getHeaders();
List<String> cookies = headers.get(HttpHeaders.SET_COOKIE);


assertThat(response.getBody()).isEqualTo("Create Cookie");
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
for (String cookie : cookies) {
System.out.println("cookie = " + cookie);
assertThat(cookie.contains("helloCookie")).isTrue();
}
}

쿠키 삭제

쿠키를 지우는 방법은 setMaxAge 메소드를 이용해 쿠키 시간을 없애면 된다.

@GetMapping("/cookie/delete")
public ResponseEntity<String> deleteCookie(HttpServletResponse httpServletResponse) {
Cookie cookie = new Cookie("helloCookie", null);
// 쿠키 시간을 없애면 Client 에서 자동적으로 쿠키를 삭제합니다.
cookie.setMaxAge(0);

httpServletResponse.addCookie(cookie);
return ResponseEntity.ok().body("Delete Cookie");
}
Share