From 9be7ee85bc8340e9df09c0fed27f1e83bc0e52c0 Mon Sep 17 00:00:00 2001 From: Roman Zabaluev Date: Tue, 20 Jun 2023 16:10:39 +0800 Subject: [PATCH] Fix CORS once again --- .../ui/config/CorsGlobalConfiguration.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CorsGlobalConfiguration.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CorsGlobalConfiguration.java index c6c88bfa984..448f92ad477 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CorsGlobalConfiguration.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/CorsGlobalConfiguration.java @@ -1,18 +1,41 @@ package com.provectus.kafka.ui.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.web.reactive.config.CorsRegistry; import org.springframework.web.reactive.config.WebFluxConfigurer; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; +import reactor.core.publisher.Mono; @Configuration -public class CorsGlobalConfiguration implements WebFluxConfigurer { +public class CorsGlobalConfiguration { - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowedOrigins("*") - .allowedMethods("*") - .allowedHeaders("*") - .allowCredentials(false); + @Bean + public WebFilter corsFilter() { + return (final ServerWebExchange ctx, final WebFilterChain chain) -> { + final ServerHttpRequest request = ctx.getRequest(); + + final ServerHttpResponse response = ctx.getResponse(); + final HttpHeaders headers = response.getHeaders(); + headers.add("Access-Control-Allow-Origin", "*"); + headers.add("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS"); + headers.add("Access-Control-Max-Age", "3600"); + headers.add("Access-Control-Allow-Headers", "Content-Type"); + + if (request.getMethod() == HttpMethod.OPTIONS) { + response.setStatusCode(HttpStatus.OK); + return Mono.empty(); + } + + return chain.filter(ctx); + }; } + }