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

posted @ 2020-07-14 14:45  小泉哥  阅读(6043)  评论(0编辑  收藏  举报