Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Enable CORS in Spring 5 Webflux?

How to enable CORS in a Spring 5 Webflux Project?

I cannot find any proper documentation.

like image 732
Dachstein Avatar asked Oct 27 '17 15:10

Dachstein


People also ask

How do I enable CORS policy in Spring boot?

Enable CORS in Controller Method We need to set the origins for RESTful web service by using @CrossOrigin annotation for the controller method. This @CrossOrigin annotation supports specific REST API, and not for the entire application.

Is CORS enabled by default in Spring boot?

You need to add @CrossOrigin annotation by yourself to get CORS Support in Spring. Why: Enabling CORS (Cross-origin resource sharing) by default will be a serious security issue.


1 Answers

I had success with this custom filter:

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.cors.reactive.CorsUtils; 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 CorsConfiguration {    private static final String ALLOWED_HEADERS = "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN";   private static final String ALLOWED_METHODS = "GET, PUT, POST, DELETE, OPTIONS";   private static final String ALLOWED_ORIGIN = "*";   private static final String MAX_AGE = "3600";    @Bean   public WebFilter corsFilter() {     return (ServerWebExchange ctx, WebFilterChain chain) -> {       ServerHttpRequest request = ctx.getRequest();       if (CorsUtils.isCorsRequest(request)) {         ServerHttpResponse response = ctx.getResponse();         HttpHeaders headers = response.getHeaders();         headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN);         headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS);         headers.add("Access-Control-Max-Age", MAX_AGE);         headers.add("Access-Control-Allow-Headers",ALLOWED_HEADERS);         if (request.getMethod() == HttpMethod.OPTIONS) {           response.setStatusCode(HttpStatus.OK);           return Mono.empty();         }       }       return chain.filter(ctx);     };   }  } 

and org.springframework.boot:spring-boot-starter-web should not be included as dependency - filter does not work with it.

like image 183
Zufar Muhamadeev Avatar answered Sep 21 '22 02:09

Zufar Muhamadeev