springboot2.x前后端分离Cookie sameSite导致跨域的坑


问题:前端vue+axios,后台springboot2.3+spring-session,为了解决跨域问题,前端已经设置了

axios.defaults.withCredentials = true;

后台也加了注解

@CrossOrigin(origins = "*", maxAge = 3600,allowCredentials="true")

但是登录后,前端一直携带不了cookies。

原因:

 

spring-session 2.x 中 Cookie里面居然引入了SameSite 这个叼毛,他默认值是 Lax,好了咱们来看看这个是什么东西?

  SameSite Cookie 是用来防止CSRF攻击,它有两个值:Strict、Lax

SameSite = Strict:

  意为严格模式,表明这个cookie在任何情况下都不可能作为第三方cookie;

SameSite = Lax:

  意为宽松模式,在GET请求是可以作为第三方cookie,但是不能携带cookie进行跨域post访问(这就很蛋疼了,我们那个校验接口就是POST请求)

总结:前端请求到后台,每次session都不一样,每次都是新的会话,导致获取不到用户信息

解决方案:

  将SameSite设置为空

package com.pacmp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;

/**
 * @Author 
 * @Date 2020/7/14 14:12
 * @Version 版本号
 * @Description 解决SameSite=Lax导致前端无法携带Cookie的坑
 */
@Configuration
public class SpringSessionConfig {

    public SpringSessionConfig() {
    }

    @Bean
    public CookieSerializer httpSessionIdResolver() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        // 取消仅限同一站点设置
        cookieSerializer.setSameSite(null);
        return cookieSerializer;
    }
}

参考文章:https://www.cnblogs.com/hujinshui/p/11025848.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM