需求:(springboot+shiro+ajax)前后端分离,需要发送跨域请求;要求后端能接收到pojo(javaBean)对象当作参数,如下接口:
@PostMapping("/index")
public Result index(@RequestBody User user){
sout(user);
}
问题:当你前后端都支持跨域后,使用ajax正常发送跨域请求时会发现无法通过认证;
原因:跨域请求分为简单请求和非简答请求;其中非简单请求发送前会发送一个options
请求来询问服务器,但是这次请求不会携带cookie信息,所以shiro无法识别用户是否登录;
解决:在用户进行认证之前对方法为options
的请求进行拦截,并给出合适的响应头让浏览器觉得这次预请求是成功的,这样浏览器就会再次发送post请求来发送jsonString数据了。
关于跨域请求的简单请求和非简单请求参考:跨域资源共享 CORS 详解