@Override public Mono<Void> setComplete() { return getDelegate().setComplete(); }
@Override @SuppressWarnings("unchecked") public Mono<Void> render( @Nullable Map<String, ?> model, @Nullable MediaType contentType, ServerWebExchange exchange) { Object value = getObjectToRender(model); return (value != null ? write(value, contentType, exchange) : exchange.getResponse().setComplete()); }
@Override public Mono<ServerResponse> build() { return build((exchange, handlerStrategies) -> exchange.getResponse().setComplete()); }
@Override public Mono<ServerResponse> build(Publisher<Void> voidPublisher) { Assert.notNull(voidPublisher, "Publisher must not be null"); return build((exchange, handlerStrategies) -> Mono.from(voidPublisher).then(exchange.getResponse().setComplete())); }
@Override public Mono<Void> handle(ServerHttpRequest request, ServerHttpResponse response) { // Remove underlying context path first (e.g. Servlet container) String path = request.getPath().pathWithinApplication().value(); return this.handlerMap.entrySet().stream() .filter(entry -> path.startsWith(entry.getKey())) .findFirst() .map(entry -> { String contextPath = request.getPath().contextPath().value() + entry.getKey(); ServerHttpRequest newRequest = request.mutate().contextPath(contextPath).build(); return entry.getValue().handle(newRequest, response); }) .orElseGet(() -> { response.setStatusCode(HttpStatus.NOT_FOUND); return response.setComplete(); }); }
@Override public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) { HttpStatus status = resolveStatus(ex); if (status == null || !exchange.getResponse().setStatusCode(status)) { return Mono.error(ex); } // Mirrors AbstractHandlerExceptionResolver in spring-webmvc... String logPrefix = exchange.getLogPrefix(); if (this.warnLogger != null && this.warnLogger.isWarnEnabled()) { this.warnLogger.warn(logPrefix + formatError(ex, exchange.getRequest()), ex); } else if (logger.isDebugEnabled()) { logger.debug(logPrefix + formatError(ex, exchange.getRequest())); } return exchange.getResponse().setComplete(); }
@Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String token = exchange.getRequest().getQueryParams().getFirst("token"); if (token == null || token.isEmpty()) { logger.info( "token is empty..." ); exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } return chain.filter(exchange); }
@Test public void getSessionSaveWhenCreatedAndStartedThenSavesAndSetsId() { when(this.sessionIdResolver.resolveSessionIds(this.exchange)).thenReturn(Collections.emptyList()); WebSession session = this.sessionManager.getSession(this.exchange).block(); assertSame(this.createSession, session); String sessionId = this.createSession.getId(); when(this.createSession.isStarted()).thenReturn(true); this.exchange.getResponse().setComplete().block(); verify(this.sessionStore).createWebSession(); verify(this.sessionIdResolver).setSessionId(any(), eq(sessionId)); verify(this.createSession).save(); }
@Override public final Mono<Void> writeTo(ServerWebExchange exchange, Context context) { writeStatusAndHeaders(exchange.getResponse()); Instant lastModified = Instant.ofEpochMilli(headers().getLastModified()); HttpMethod httpMethod = exchange.getRequest().getMethod(); if (SAFE_METHODS.contains(httpMethod) && exchange.checkNotModified(headers().getETag(), lastModified)) { return exchange.getResponse().setComplete(); } else { return writeToInternal(exchange, context); } }
@Test public void getSessionSaveWhenCreatedAndNotStartedThenNotSaved() { when(this.sessionIdResolver.resolveSessionIds(this.exchange)).thenReturn(Collections.emptyList()); WebSession session = this.sessionManager.getSession(this.exchange).block(); this.exchange.getResponse().setComplete().block(); assertSame(this.createSession, session); assertFalse(session.isStarted()); assertFalse(session.isExpired()); verify(this.createSession, never()).save(); verify(this.sessionIdResolver, never()).setSessionId(any(), any()); }
private static Mono<Void> respond(ServerWebExchange exchange, Map<String, String> parameters) { String wwwAuthenticate = computeWWWAuthenticateHeaderValue(parameters); exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN); exchange.getResponse().getHeaders().set(HttpHeaders.WWW_AUTHENTICATE, wwwAuthenticate); return exchange.getResponse().setComplete(); }
private Mono<Void> redirect(ServerHttpResponse response) { response.setStatusCode(HttpStatus.MOVED_PERMANENTLY); response.getHeaders().setLocation(URI.create("/")); return response.setComplete(); }
@Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { if (exchange.getRequest().getURI().getHost().equals("github.com")) { return exchange.getResponse().setComplete(); } return chain.filter(exchange); } }
@Before public void setup() { this.filter = new OAuth2AuthorizationRequestRedirectWebFilter(this.clientRepository); this.filter.setAuthorizationRequestRepository(this.authzRequestRepository); FilteringWebHandler webHandler = new FilteringWebHandler(e -> e.getResponse().setComplete(), Arrays.asList(this.filter)); this.client = WebTestClient.bindToWebHandler(webHandler).build(); when(this.clientRepository.findByRegistrationId(this.registration.getRegistrationId())).thenReturn( Mono.just(this.registration)); when(this.authzRequestRepository.saveAuthorizationRequest(any(), any())).thenReturn( Mono.empty()); }
@Before public void setup() { this.filter = new OAuth2LoginAuthenticationWebFilter(this.authenticationManager, this.authorizedClientRepository); this.webFilterExchange = new WebFilterExchange(MockServerWebExchange.from(MockServerHttpRequest.get("/")), new DefaultWebFilterChain(exchange -> exchange.getResponse().setComplete())); when(this.authorizedClientRepository.saveAuthorizedClient(any(), any(), any())) .thenReturn(Mono.empty()); }
@Override public Mono<Void> handle(ServerHttpRequest request, ServerHttpResponse response) { this.requestCookies = request.getCookies(); this.requestCookies.size(); // Cause lazy loading response.getCookies().add("SID", ResponseCookie.from("SID", "31d4d96e407aad42") .path("/").secure(true).httpOnly(true).build()); response.getCookies().add("lang", ResponseCookie.from("lang", "en-US") .domain("example.com").path("/").build()); return response.setComplete(); } }
@Test public void filterWhenNotMatchThenAuthenticationManagerNotCalled() { MockServerWebExchange exchange = MockServerWebExchange .from(MockServerHttpRequest.get("/")); DefaultWebFilterChain chain = new DefaultWebFilterChain( e -> e.getResponse().setComplete()); this.filter.filter(exchange, chain).block(); verifyZeroInteractions(this.authenticationManager); }
@Test public void adaptRequest() throws Exception { TestHttpHandler handler = new TestHttpHandler(response -> { response.setStatusCode(HttpStatus.OK); return response.setComplete(); }); new HttpHandlerConnector(handler).connect(HttpMethod.POST, URI.create("/custom-path"), request -> { request.getHeaders().put("custom-header", Arrays.asList("h0", "h1")); request.getCookies().add("custom-cookie", new HttpCookie("custom-cookie", "c0")); return request.writeWith(Mono.just(toDataBuffer("Custom body"))); }).block(Duration.ofSeconds(5)); MockServerHttpRequest request = (MockServerHttpRequest) handler.getSavedRequest(); assertEquals(HttpMethod.POST, request.getMethod()); assertEquals("/custom-path", request.getURI().toString()); HttpHeaders headers = request.getHeaders(); assertEquals(Arrays.asList("h0", "h1"), headers.get("custom-header")); assertEquals(new HttpCookie("custom-cookie", "c0"), request.getCookies().getFirst("custom-cookie")); assertEquals(Collections.singletonList("custom-cookie=c0"), headers.get(HttpHeaders.COOKIE)); DataBuffer buffer = request.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)); }
@Test // SPR-16059 public void mutateDoesCopy() { WebTestClient.Builder builder = WebTestClient .bindToWebHandler(exchange -> exchange.getResponse().setComplete()) .configureClient(); builder.filter((request, next) -> next.exchange(request)); builder.defaultHeader("foo", "bar"); builder.defaultCookie("foo", "bar"); WebTestClient client1 = builder.build(); builder.filter((request, next) -> next.exchange(request)); builder.defaultHeader("baz", "qux"); builder.defaultCookie("baz", "qux"); WebTestClient client2 = builder.build(); WebTestClient.Builder mutatedBuilder = client1.mutate(); mutatedBuilder.filter((request, next) -> next.exchange(request)); mutatedBuilder.defaultHeader("baz", "qux"); mutatedBuilder.defaultCookie("baz", "qux"); WebTestClient clientFromMutatedBuilder = mutatedBuilder.build(); client1.mutate().filters(filters -> assertEquals(1, filters.size())); client1.mutate().defaultHeaders(headers -> assertEquals(1, headers.size())); client1.mutate().defaultCookies(cookies -> assertEquals(1, cookies.size())); client2.mutate().filters(filters -> assertEquals(2, filters.size())); client2.mutate().defaultHeaders(headers -> assertEquals(2, headers.size())); client2.mutate().defaultCookies(cookies -> assertEquals(2, cookies.size())); clientFromMutatedBuilder.mutate().filters(filters -> assertEquals(2, filters.size())); clientFromMutatedBuilder.mutate().defaultHeaders(headers -> assertEquals(2, headers.size())); clientFromMutatedBuilder.mutate().defaultCookies(cookies -> assertEquals(2, cookies.size())); }