Làm cách nào để kích hoạt CORS trong dự án Springflux Web 5?Bật CORS trong Spring 5 Webflux?
Tôi không thể tìm thấy bất kỳ tài liệu thích hợp nào.
Làm cách nào để kích hoạt CORS trong dự án Springflux Web 5?Bật CORS trong Spring 5 Webflux?
Tôi không thể tìm thấy bất kỳ tài liệu thích hợp nào.
Tôi đã thành công với bộ lọc tùy chỉnh này:
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);
};
}
}
và org.springframework.boot:spring-boot-starter-web
không nên được đưa vào như phụ thuộc - lọc không làm việc với nó.
Đối với mô hình phi chức năng trong Spring WebFlux, cách nào được đề xuất để đạt được bộ lọc như chức năng nếu sử dụng Netty và không có servlet cổ điển bộ lọc và không sử dụng các bộ lọc mô hình chức năng như trên? – ROCKY
@ ROCKY, tôi đã kiểm tra ví dụ này trong netty - nó hoạt động. Tôi nghĩ rằng bạn có thể sử dụng mô hình phi chức năng trong bộ điều khiển và nó sẽ làm việc (tuy nhiên haven't đã thử nó). –
@Configuration
public class WebFluxConfig {
@Bean
public WebFluxConfigurer corsConfigurer() {
return new WebFluxConfigurerComposite() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*")
.allowedMethods("*");
}
};
}
}
tương ứng với:
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
cho MVC mùa xuân.
Cảm ơn bạn đã trả lời ... Tôi sẽ thử vào cuối tuần này. – Dachstein
Tôi đã thử câu trả lời của bạn với spring-cloud-starter-gateway (nó sử dụng spring 5 webflux) - không thành công –
https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/cors.html – sideshowbarker
bạn đã thử @CrossOrigin (nguồn gốc = "*") trên bộ điều khiển của bạn chưa? –