목차
쿠키 생성
스프링에서 쿠키는 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";
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); cookie.setMaxAge(0); httpServletResponse.addCookie(cookie); return ResponseEntity.ok().body("Delete Cookie"); }
|