一般的,只要网站的【协议名protocol】、【主机host】、【端口号port】这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用
跨域:浏览同源策略的造成,是浏览器对JavaScript施加的安全限制
CORS是一种可以解决跨域问题的技术

SprinMVC通过@CrossOrigin注解解决跨域

在Spring MVC4.2之后推出了@CrossOrigin注解来解决跨域问题,而在4.2之前我们都是通过定义注册过滤器的方式来解决跨域问题的

@CrossOrigin的参数:
1、origins:允许可访问的域列表;*表示可以是任何来源
2、maxAge:准备响应前的缓存持续的最大时间(单位:秒)

@CrossOrigin使用在Controller层:
1、类上,此类中所有方法启用跨域支持

// 开启跨域支持
@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserController {
}

2、方法上,仅此方法启用跨域支持

// 开启跨域支持
@CrossOrigin
@RequestMapping(value = "/findAll", method = RequestMethod.GET)
public List<User> findAll(){
    return userService.findAll();
}

注意

1、注解失效问题:此时Controlle的方法上@RequestMapping注解中需要声明请求方式即增加method=RequestMethod.XXX

2、添加注解后session失效问题:此时对的ajax请求中需要添加xhrFields:{withCredentials:true}(每个ajax中都需要加此属性,以保证session一致)

$.ajax({
    type: "post",
    url: '/user/login',
    xhrFields: {withCredentials: true},
    data: {
        username: username,
        password: password
    },
    success: function (msg) {
        console.log('登录成功');
    },
    error: function (msg) {
        console.log('请求报错!');
    }
})

YOLO