最近刚接触若依这个开源框架,发现gateway模块默认配置跨域不起作用,然后前端代理又不太爱用 默认网关跨域配置如下:
cloud:
gateway:
#跨域配置
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "*" # 允许所有来源,生产环境建议指定具体域名
allowedMethods: "*" # 允许所有HTTP方法
allowedHeaders: "*" # 允许所有请求头
allowCredentials: true # 允许携带cookie
maxAge: 360000 # 预检请求缓存时间(毫秒)
最后发现需要在gateway模块实现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);
}
}