/** * Invoked when one of the CORS checks failed. */ protected void rejectRequest(ServerHttpResponse response) { response.setStatusCode(HttpStatus.FORBIDDEN); }
/** * Invoked when one of the CORS checks failed. */ protected void rejectRequest(ServerHttpResponse response) { response.setStatusCode(HttpStatus.FORBIDDEN); }
@Override public boolean setStatusCode(@Nullable HttpStatus status) { return getDelegate().setStatusCode(status); }
@Override public boolean setStatusCode(@Nullable HttpStatus status) { return getDelegate().setStatusCode(status); }
@Override public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) { exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST); return Mono.empty(); } }
@Override public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) { exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); return Mono.empty(); } }
@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(); }); }
/** * Send a redirect back to the HTTP client. * @param targetUrl the target URL to redirect to * @param exchange current exchange */ protected Mono<Void> sendRedirect(String targetUrl, ServerWebExchange exchange) { String transformedUrl = (isRemoteHost(targetUrl) ? targetUrl : exchange.transformUrl(targetUrl)); ServerHttpResponse response = exchange.getResponse(); response.getHeaders().setLocation(URI.create(transformedUrl)); response.setStatusCode(getStatusCode()); return Mono.empty(); }
private Mono<Void> handleUnresolvedError(ServerWebExchange exchange, Throwable ex) { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); String logPrefix = exchange.getLogPrefix(); if (isDisconnectedClientError(ex)) { if (lostClientLogger.isTraceEnabled()) { lostClientLogger.trace(logPrefix + "Client went away", ex); } else if (lostClientLogger.isDebugEnabled()) { lostClientLogger.debug(logPrefix + "Client went away: " + ex + " (stacktrace at TRACE level for '" + DISCONNECTED_CLIENT_LOG_CATEGORY + "')"); } return Mono.empty(); } else if (response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)) { logger.error(logPrefix + "500 Server Error for " + formatRequest(request), ex); return Mono.empty(); } else { // After the response is committed, propagate errors to the server.. logger.error(logPrefix + "Error [" + ex + "] for " + formatRequest(request) + ", but ServerHttpResponse already committed (" + response.getStatusCode() + ")"); return Mono.error(ex); } }
@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(); }
private void writeStatusAndHeaders(ServerHttpResponse response) { if (response instanceof AbstractServerHttpResponse) { ((AbstractServerHttpResponse) response).setStatusCodeValue(this.statusCode); } else { HttpStatus status = HttpStatus.resolve(this.statusCode); if (status == null) { throw new IllegalStateException( "Unresolvable HttpStatus for general ServerHttpResponse: " + this.statusCode); } response.setStatusCode(status); } copy(this.headers, response.getHeaders()); copy(this.cookies, response.getCookies()); }
@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); }
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(); }
getResponse().setStatusCode(HttpStatus.PRECONDITION_FAILED); getResponse().setStatusCode(isHttpGetOrHead ? HttpStatus.NOT_MODIFIED : HttpStatus.PRECONDITION_FAILED);
@Override public Mono<Void> commence(ServerWebExchange exchange, AuthenticationException authException) { return Mono.defer(() -> { HttpStatus status = getStatus(authException); Map<String, String> parameters = createParameters(authException); String wwwAuthenticate = computeWWWAuthenticateHeaderValue(parameters); ServerHttpResponse response = exchange.getResponse(); response.getHeaders().set(HttpHeaders.WWW_AUTHENTICATE, wwwAuthenticate); response.setStatusCode(status); return response.setComplete(); }); }
private Mono<Void> redirect(ServerHttpResponse response) { response.setStatusCode(HttpStatus.MOVED_PERMANENTLY); response.getHeaders().setLocation(URI.create("/")); return response.setComplete(); }
@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 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 public void exceptionHandler() { RouterFunction<ServerResponse> routerFunction = RouterFunctions.route() .GET("/error", request -> Mono.error(new IllegalStateException("boo"))) .build(); new DefaultRouterFunctionSpec(routerFunction) .handlerStrategies(HandlerStrategies.builder() .exceptionHandler((exchange, ex) -> { exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST); return Mono.empty(); }) .build()) .build() .get() .uri("/error") .exchange() .expectStatus().isBadRequest(); } }
@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)); }