什么叫跨域
浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了.简而言之,就是本地服务器不能调用其他服务器的资源。
导致的问题:
- web端收不到服务器端的返回消息
- 导致请求的Session不一致
在SpringBoot中的解决策略
-Controller页面加上@CrossOrigin表示服务器允许跨域
@RequestMapping("/mages")
@Controller
@CrossOrigin
public class Test(){
}
-添加MVC配置
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
// 设置跨域访问
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "TRACE")
.allowCredentials(true);
}
}
-若是没有使用redis来进行状态维护的话,跨域会带来Session不一致问题,解决方案为:
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});