跨域问题及解决方案

跨域中的同源策略

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript 施加的安全限制。

同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域。

这里有一个对跨域问题更加详细的介绍

HTTP访问控制(CORS)

非简单的请求,会先发送预检请求。必须响应回来一个允许跨域,才可以真正开始通讯。

解决跨域问题

在开发阶段,我们一般采用第二种。

可以配置在单个微服务,也可以配置在网关这一块。

主要的类是 CorsWebFilter ,里面需要一个 CorsConfigurationSource 接口作为参数,我们new一个它的实现类 UrlBasedCorsConfigurationSource ,设置所有的请求都要经过,然后在第二个参数传一个CorsConfiguration ,该接口可以设置各种具体的跨域请求。

具体代码

代码语言:javascript
复制
@Configuration
public class LaketradingCorsConfiguration {
    @Bean
    public CorsWebFilter corsWebFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.addAllowedHeader("*");
        configuration.addAllowedMethod("*");
        configuration.addAllowedOrigin("*");
        configuration.setAllowCredentials(true);
        source.registerCorsConfiguration("/**",configuration);
        return new CorsWebFilter(source);
    }
}

针对SpringBoot还有一个注解,@CrossOrigin 直接添加在API接口层就行。但这也是比较麻烦的,每个 Controller 都要添加。