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

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

本项目是使用spring-session-data-redis实现HTTP Session集中管理原理

 

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

spring web 最新版默认生成为SameSite=Lax,奇怪的是用spring-session-data-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; 

}

使用的pom依赖

 <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>2.1.1.RELEASE</version>
 </dependency>

前端在与后台交互时也得做如下的配置(ajax请求)

xhrFields: {
    withCredentials: true
}

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

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

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

  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值