解决由于SameSite=Lax引起的Set-Cookie不成功问题

使用axious发送登录请求时发现响应返回Set-Cookie一直不成功,浏览器错误提示如下:

看了一些文章说是因为浏览器考虑安全问题导致的,相关内容就不介绍了,这里主要介绍我使用的有效的方法,简单一步。 只需创建config文件夹并新建SessionConfig类:

import org.springframework.boot.autoconfigure.session.DefaultCookieSerializerCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.MapSessionRepository;
import org.springframework.session.SessionRepository;
import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession;
import org.springframework.session.web.http.DefaultCookieSerializer;

import java.util.concurrent.ConcurrentHashMap;

@Configuration
@EnableSpringHttpSession
public class SessionConfig {
          
   
 @Bean
 public SessionRepository sessionRepository() {
          
   
     return new MapSessionRepository(new ConcurrentHashMap<>());
 }

 @Bean
 DefaultCookieSerializerCustomizer cookieSerializerCustomizer() {
          
   
     return new DefaultCookieSerializerCustomizer() {
          
   
         @Override
         public void customize(DefaultCookieSerializer cookieSerializer) {
          
   
             cookieSerializer.setSameSite("None");
             cookieSerializer.setUseSecureCookie(true); // 此项必须,否则set-cookie会被chrome浏览器阻拦
         }
     };
 }
}

再次去浏览器检查就能发现可以后端发来的Cookie可以被前端正常保存了

记得在application.xml里配置以下代码,作用是让这个Cookie只能在本地域名使用

session:
  cookie:
    domain: localhost

这样后端传来的Cookie可以在前端正常保存,但当前端向后端请求时携带Cookie也需要设置一下 只需在myAxios.ts(你的Axios文件)里添加以下片段即可:

myAxios.defaults.withCredentials = true; // 配置为true

本人小白,很多表达可能不准确,还请指正

经验分享 程序员 微信小程序 职场和发展