若依微服务版跨域问题配置

113 阅读1分钟

最近刚接触若依这个开源框架,发现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);
    }
}