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