跨域:CORS(跨域资源共享)是一种机制,允许Web应用服务器执行跨域HTTP请求。当一个Web应用尝试从不同的源(协议、域名或端口)请求资源时,浏览器的安全策略会阻止这种请求,除非服务器明确允许跨域请求。(所以跨域问题他只会存在与浏览器环境)
1.单体架构跨域配置:
public class WebConfig implements WebMvcConfigurer { /** * 创建并配置CORS过滤器,以允许来自指定来源的跨域请求。 * 这个方法设置了过滤器的配置,包括允许的来源、请求头、请求方法和凭证。 * * @return CorsFilter 返回配置好的CORS过滤器实例。 */ public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); // 设置允许的来源为http://localhost:8081 config.addAllowedOrigin("http://localhost:8081"); // 设置允许所有的请求头 config.addAllowedHeader("*"); // 设置允许所有的请求方法 config.addAllowedMethod("*"); // 允许请求携带凭证(如cookies) config.setAllowCredentials(true); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); // 将CORS配置应用到所有路径 source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } }
在单体架构中我通过配置类来设置我的跨域,但是这种跨域配置在微服务中变得不再适用,由于在微服务中一般浏览器会先去访问网关服务,然后通过网关来进行路由转发,所以需要在网关服务进行跨域配置,但是由于网关是没有SpringMVC环境,而以上的跨域配置是适用于SpringMVC项目,所以我们需要在网关中换一种跨域配置
2.微服务架构跨域配置:
spring cloud gateway globalcors cors-configurations '[/**]'# 通配符路径 allowedOrigins"http://localhost:8081" allowedMethods# 允许的所有HTTP方法 GET POST PUT DELETE OPTIONS allowedHeaders"*" # 允许的所有头部 allowCredentials true # 是否允许携带凭证 maxAge 3600 # 最大缓存时间(秒)
在基于Gateway组件的网关服务中,可以使用通过在yaml中配置的方式来设置我们的跨域。