@Override public void addCookie(ResponseCookie cookie) { getDelegate().addCookie(cookie); }
@Override public void addCookie(ResponseCookie cookie) { getDelegate().addCookie(cookie); }
@GetMapping("/cookie") public Mono<Void> setCookie(ServerHttpResponse response) { response.addCookie(ResponseCookie.from("cookieName", "theCookie").build()); return redirect(response); }
@GetMapping("/cookie/delete") public Mono<Void> deleteCookie(ServerHttpResponse response) { response.addCookie( ResponseCookie.from("cookieName", "").maxAge(Duration.ofSeconds(0)).build()); return redirect(response); } }
@Test public void adaptResponse() throws Exception { ResponseCookie cookie = ResponseCookie.from("custom-cookie", "c0").build(); TestHttpHandler handler = new TestHttpHandler(response -> { response.setStatusCode(HttpStatus.OK); response.getHeaders().put("custom-header", Arrays.asList("h0", "h1")); response.addCookie(cookie); return response.writeWith(Mono.just(toDataBuffer("Custom body"))); }); ClientHttpResponse response = new HttpHandlerConnector(handler) .connect(HttpMethod.GET, URI.create("/custom-path"), ReactiveHttpOutputMessage::setComplete) .block(Duration.ofSeconds(5)); assertEquals(HttpStatus.OK, response.getStatusCode()); HttpHeaders headers = response.getHeaders(); assertEquals(Arrays.asList("h0", "h1"), headers.get("custom-header")); assertEquals(cookie, response.getCookies().getFirst("custom-cookie")); assertEquals(Collections.singletonList("custom-cookie=c0"), headers.get(HttpHeaders.SET_COOKIE)); DataBuffer buffer = response.getBody().blockFirst(Duration.ZERO); assertEquals("Custom body", DataBufferTestUtils.dumpString(buffer, UTF_8)); }
@Test // SPR-16124 public void exchangeResultHasCookieHeaders() { ExchangeResult result = WebTestClient .bindToWebHandler(exchange -> { ServerHttpResponse response = exchange.getResponse(); if (exchange.getRequest().getURI().getPath().equals("/cookie")) { response.addCookie(ResponseCookie.from("a", "alpha").path("/pathA").build()); response.addCookie(ResponseCookie.from("b", "beta").path("/pathB").build()); } else { response.setStatusCode(HttpStatus.NOT_FOUND); } return response.setComplete(); }) .build() .get().uri("/cookie").cookie("a", "alpha").cookie("b", "beta") .exchange() .expectStatus().isOk() .expectHeader().valueEquals(HttpHeaders.SET_COOKIE, "a=alpha; Path=/pathA", "b=beta; Path=/pathB") .expectBody().isEmpty(); assertEquals(Arrays.asList("a=alpha", "b=beta"), result.getRequestHeaders().get(HttpHeaders.COOKIE)); }
@Override public void addCookie(ResponseCookie cookie) { getDelegate().addCookie(cookie); }
@Override public void addCookie(ResponseCookie cookie) { getDelegate().addCookie(cookie); }
@Override public Mono<Void> saveToken(ServerWebExchange exchange, CsrfToken token) { return Mono.fromRunnable(() -> { Optional<String> tokenValue = Optional.ofNullable(token).map(CsrfToken::getToken); ResponseCookie cookie = ResponseCookie.from(this.cookieName, tokenValue.orElse("")) .domain(this.cookieDomain) .httpOnly(this.cookieHttpOnly) .maxAge(tokenValue.map(val -> -1).orElse(0)) .path(Optional.ofNullable(this.cookiePath).orElseGet(() -> getRequestContext(exchange.getRequest()))) .secure(Optional.ofNullable(exchange.getRequest().getSslInfo()).map(sslInfo -> true).orElse(false)) .build(); exchange.getResponse().addCookie(cookie); }); }