Commit a95bbc57 authored by 陈立彬's avatar 陈立彬

跨域配置

parent 8997304c
...@@ -7,39 +7,61 @@ import org.springframework.http.HttpMethod; ...@@ -7,39 +7,61 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.cors.reactive.CorsUtils; import org.springframework.web.cors.reactive.CorsUtils;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain; import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import java.util.Collections;
@Configuration @Configuration
public class CorsConfig { public class CorsConfig {
// @Bean
// public WebFilter corsFilter2() {
// return (ServerWebExchange ctx, WebFilterChain chain) -> {
// ServerHttpRequest request = ctx.getRequest();
// if (CorsUtils.isCorsRequest(request)) {
// HttpHeaders requestHeaders = request.getHeaders();
// ServerHttpResponse response = ctx.getResponse();
// HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();
// HttpHeaders headers = response.getHeaders();
// headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());
// headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS,
// requestHeaders.getAccessControlRequestHeaders());
// if (requestMethod != null) {
// headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());
// }
// headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
// headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
// if (request.getMethod() == HttpMethod.OPTIONS) {
// response.setStatusCode(HttpStatus.OK);
// return Mono.empty();
// }
// }
// return chain.filter(ctx);
// };
// }
@Bean @Bean
public WebFilter corsFilter2() { public CorsFilter corsFilter() {
return (ServerWebExchange ctx, WebFilterChain chain) -> { CorsConfiguration corsConfiguration = new CorsConfiguration();
ServerHttpRequest request = ctx.getRequest(); //1.允许任何来源
if (CorsUtils.isCorsRequest(request)) { corsConfiguration.setAllowedOriginPatterns(Collections.singletonList("*"));
HttpHeaders requestHeaders = request.getHeaders(); //2.允许任何请求头
ServerHttpResponse response = ctx.getResponse(); corsConfiguration.addAllowedHeader(CorsConfiguration.ALL);
HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod(); //3.允许任何方法
HttpHeaders headers = response.getHeaders(); corsConfiguration.addAllowedMethod(CorsConfiguration.ALL);
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin()); //4.允许凭证
headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, corsConfiguration.setAllowCredentials(true);
requestHeaders.getAccessControlRequestHeaders());
if (requestMethod != null) { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name()); source.registerCorsConfiguration("/**", corsConfiguration);
} return new CorsFilter(source);
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
if (request.getMethod() == HttpMethod.OPTIONS) {
response.setStatusCode(HttpStatus.OK);
return Mono.empty();
}
}
return chain.filter(ctx);
};
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment