最近在项目中要使用到跨域请求验证码然后再提交的问题。由于验证码是存在session里的,而跨域请求在后台获得的session每次都不一样,导致验证码无法比对。网上查找的方法都比较含糊,最后解决了决定写个自己的理解,方便以后查找。
首先,我们需要在前端的ajax添加以下代码
$.ajax({
xhrFields: {
withCredentials: true
},
crossDomain: true,
})
其实这个代码已经实现了跨域,使后台能够获得对应的session,但是由于后台的响应没有设置对应的响应头,此时的ajax是取不到返回的data,会提示Access-Control-Allow-Origin的错误,执行error里的function。xhrFields:{withCredentials:true}可以实现ajax请求时发送cookie,当然禁用cookie会使该功能不能正常使用。
这个时候我们需要先在后台输入以下代码
response.setHeader("Access-Control-Allow-Credentials","true");
然后输入
response.setHeader("Access-Control-Allow-Origin",请求该业务网页的域);
如果想实现所有网页都能请求该业务,我们可以这么写
response.setHeader("Access-Control-Allow-Origin",request.getHeader("origin"));
reqeust.getHeader("origin")可以获得请求的域。
后台代码仅仅是为了前端能够正确获得返回的数据,并不影响controller内业务的执行。