2017-10-27 12 views
6

有効にする方法CORSをSpring 5 Webfluxプロジェクトで使用しますか?Spring 5 WebfluxでCORSを有効にしますか?

適切なドキュメントが見つかりません。スプリングMVCため

@Bean 
public WebMvcConfigurer corsConfigurer() { 
    return new WebMvcConfigurerAdapter() { 

     @Override 
     public void addCorsMappings(CorsRegistry registry) { 

:に相当

+0

https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/cors.html – sideshowbarker

+0

コントローラーで@CrossOrigin(origins = "*")を試しましたか? –

答えて

5

私はこのカスタムフィルタで成功を収めて:

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); 
    }; 
    } 

} 

org.springframework.boot:spring-boot-starter-webは、依存関係として含めるべきではない - フィルターはそれで動作しません。

+0

Spring WebFluxの機能しないモデルの場合、Nettyを使用していて古典的なサーブレット上記のような機能モデルフィルタを使用しない – ROCKY

+0

@ROCKY、私はこの例をnettyでチェックしました。私はコントローラで非機能モデルを使用することができ、それが動作すると思う(しかし、それを試していない)。 –

1
@Configuration 
public class WebFluxConfig { 

    @Bean 
    public WebFluxConfigurer corsConfigurer() { 
     return new WebFluxConfigurerComposite() { 

      @Override 
      public void addCorsMappings(CorsRegistry registry) { 
       registry.addMapping("/**").allowedOrigins("*") 
         .allowedMethods("*"); 
      } 
     }; 
    } 
} 

+0

お返事ありがとうございます...今週末に試してみます。 – Dachstein

+0

私はspring-cloud-starter-gateway(これはspring 5 webfluxを使用しています)であなたの答えを試しました - 成功なし –

関連する問題