一:域名知识:
域名的定义我在这里就不啰嗦了,在这里给大家补充一个域名级别知识。
域名可以分为:一级域名到N级域名,一般网站只会配置到三级。
一级域名也被称为顶级域名,比如 .com .org .cn,但是可能有的人会说了:baidu.com,zhihu.com像这样的不也是一级域名吗?其实严格意义上来说这种并不属于一级域名,而是二级域名。但是从购买域名者的层面出发它可以被认为是一级域名。
二:为什么会有跨域问题
跨域问题是浏览器的一个安全策略,限制你访问本域名以外的其它域名资源。
三:如何解决跨域问题
方法一:使用CorsFilter进行全局跨域配置
@Configuration
public class CorsConfig {
private static final String ALLOWED_HEADERS = "*";
private static final String ALLOWED_METHODS = "*";
private static final String ALLOWED_ORIGIN = "*";
private static final String ALLOWED_EXPOSE = "Authorization";
private static final Long MAX_AGE = 18000L;
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedHeaders(Lists.newArrayList(ALLOWED_HEADERS.split(",")));
config.setAllowedOrigins(Lists.newArrayList(ALLOWED_ORIGIN.split(",")));
config.setAllowedMethods(Lists.newArrayList(ALLOWED_METHODS.split(",")));
config.setMaxAge(MAX_AGE);
config.addExposedHeader(ALLOWED_EXPOSE);
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
方法二:重写WebMvcConfigurer的addCorsMappings方法(全局跨域配置)
@Configuration
public class GlobalCorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") //添加映射路径,“/**”表示对所有的路径实行全局跨域访问权限的设置
.allowedOrigins("*") //开放哪些ip、端口、域名的访问权限
.allowCredentials(true) //是否允许发送Cookie信息
.allowedMethods("GET","POST", "PUT", "DELETE") //开放哪些Http方法,允许跨域访问
.allowedHeaders("*") //允许HTTP请求中的携带哪些Header信息
.exposedHeaders("*"); //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
}
};
}
}
方法三:使用CrossOrigin注解(局部跨域配置)
- 将CrossOrigin注解加在Controller层的方法上,该方法定义的RequestMapping端点将支持跨域访问
- 将CrossOrigin注解加在Controller层的类定义处,整个类所有的方法对应的RequestMapping端点都将支持跨域访问
@RequestMapping("/cors")
@ResponseBody
@CrossOrigin(origins = "http://localhost:8080", maxAge = 3600)
public String cors( ){
return "cors";
}