目录
关于Cors
Cors需要浏览器和服务器同时支持。目前所有浏览器都支持该功能,IE浏览器不能低于IE10
浏览器端:因为绝大多数主流浏览器都支持Cors,浏览器会自动完成Cors通信,所以不需要我们做配置
服务器端: 首先你完全不需要改变具体的业务逻辑,原理是通信时请求中多了一下头信息,我们需要设置好这些头信息在一个过滤器中,然后通信时浏览器就会和Cors校验解决问题
需要设置的参数如下:
Access-Control-Arrow-Origin: 是一个具体域名或者*代表任意域名
Access-Control-Arrow-Credentials: 是否允许携带cookie,默认为false
Access-Control-Arrow-Methods: 允许访问的方式
Access-Control-Arrow-Headers: 允许携带的头
Access-Control-Max-Age: 本次许可的有效时间,可以不设置用系统默认值,时间过期前的ajax请求就都不需要预检了
SpringCloud使用Cors解决跨域问题
整体逻辑上,SpringMVC已经集成了Cors跨域过滤器,我们只需要直接设置参数就可以了
1.在网关服务中新建一个Cors配置文件
2.编写配置
package com.leyou.gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class LeyouCorsConfiguration {
@Bean
public CorsFilter corsFilter() {
//初始化cors配置
CorsConfiguration configuration =new CorsConfiguration();
//允许跨域的域名,如果要携带cookie不能写*.*代表所有域名都可以跨域访问
configuration.addAllowedOrigin("http://manage.leyou.com");
configuration.setAllowCredentials(true); //允许携带cookie
configuration.addAllowedMethod("*"); //代表所有请求方式,post。。。
configuration.addAllowedHeader("*"); //允许携带任何头信息
//初始化cors配置源对象
UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**", configuration);
//返回corsFilter实例,参数:cors配置源对象
return new CorsFilter(corsConfigurationSource);
}
}
3.重启服务
重启该微服务项目之后发现跨域成功~