一开始的解决思路如下:
若依微服务如何解决跨域
发现都行不通,最后通过实现WebFilter接口且重写filter方法解决了此问题,代码如下:
@Component
public class CorsFilter implements WebFilter {
private static final String MAX_AGE = "3600L";
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
if (!CorsUtils.isCorsRequest(request)){
return chain.filter(exchange);
}
ServerHttpResponse response = exchange.getResponse();
HttpHeaders headers = response.getHeaders();
headers.add("Access-Control-Allow-Origin","*");
headers.add("Access-Control-Allow-Methods", "*");
headers.add("Access-Control-Allow-Headers", "*");
headers.add("Access-Control-Max-Age", MAX_AGE);
if (request.getMethod() == org.springframework.http.HttpMethod.OPTIONS) {
response.setStatusCode(org.springframework.http.HttpStatus.OK);
return Mono.empty();
}
return chain.filter(exchange);
}
}
和定义Webfilter的bean很像,但是不知道为什么定义bean始终无法解决跨域问题,也欢迎大家一起来讨论一下。