前后端分离Cookie sameSite坑 跨域之坑

在前后端分离解决跨域问题过程中,利用CORS解决跨域问题,前后端按照规范处理了,但不管怎样session都是不一致,所以前端无法登陆无法在本地测试。查了几天资料,中间反反复复,最后要放弃的时候无意中看到一个大神的博客。

 

SameSite Cookie 应该是一种新的cookie属性值,我看到很多大型网站如百度都没有用到,
他是防止 CSRF 攻击 具体可看 https://www.cnblogs.com/ziyunfei/p/5637945.html

spring web 最新版默认生成为SameSite=Lax,奇怪的是用spring data Session redis 后 cookie新增了 SameSite这个字段,所以不能携带cookie进行跨域post访问,文档上也不表明什么时候开始的,坑的是默认为Lax也不能设置,
遂现在将web版本降级

因为服务端返回给客户端的set-cookie中带有samesite=lax,这就是问题的根源,它表示不能携带cookie进行跨域post访问,然而我们是需要携带cookie的

解决办法:

 @Bean public CookieSerializer httpSessionIdResolver(){ 
    DefaultCookieSerializer   cookieSerializer = new DefaultCookieSerializer();                            cookieSerializer.setCookieName("token"); 
cookieSerializer.setUseHttpOnlyCookie(false); 
cookieSerializer.setSameSite(null); 
return cookieSerializer; 

}

这样就能正常携带cookie了,但是前提是进行ajax请求时加上

xhrFields: {
    withCredentials: true
}

它让ajax能够携带cookie请求,后端需要设置

response.setHeader("Access-Control-Allow-Credentials", "true");

允许cookie跨域,这样就大功告成!!!

你可能感兴趣的:(前后端分离Cookie sameSite坑 跨域之坑)