zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    问题 A: 【递归入门】全排列
    第一个struct2程序(2)
    第一个struct2程序
    Java学习 第二节
    重学Java
    Servlet过滤器
    struct2
    Java web struct入门基础知识
    one by one 项目 part 6
    软件工程导论 桩模块和驱动模块
  • 原文地址:https://www.cnblogs.com/penghq/p/13299027.html
Copyright © 2011-2022 走看看