无法为 spring boot 1.5.22 设置 cookie samesite=none

Posted

技术标签:

【中文标题】无法为 spring boot 1.5.22 设置 cookie samesite=none【英文标题】:Not able to set cookie samesite=none for spring boot 1.5.22 【发布时间】:2021-01-11 02:19:21 【问题描述】:

我正在使用 Spring Boot 1.5.22,但我遇到了 cookie samesite=none proporty 的问题。我无法为 cookie 设置 samesite 属性,因此 oauth 身份验证不适用于 chrome,但它正在其他浏览器上运行。所以,我尝试了一些这样的解决方案。

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer 

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) 
        if (container instanceof TomcatEmbeddedServletContainerFactory) 
            TomcatEmbeddedServletContainerFactory factory = TomcatEmbeddedServletContainerFactory.class.cast(container);
            factory.addContextCustomizers(new TomcatContextCustomizer() 
                @Override
                void customize(Context context) 
                    Rfc6265CookieProcessor cookieProcessor = new Rfc6265CookieProcessor()
                    cookieProcessor.setSameSiteCookies("None")
                    context.setCookieProcessor(cookieProcessor)
                

            )
        
    

这并没有帮助。所以我尝试添加自定义过滤器

@Component
public class SameSiteFilter implements Filter 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException 

    

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
        chain.doFilter(request, response);
        addSameSiteCookieAttribute((HttpServletResponse) response);
    

    private void addSameSiteCookieAttribute(HttpServletResponse response) 
        Collection<String> headers = response.getHeaders(HttpHeaders.SET_COOKIE);
        boolean firstHeader = true;
        for (String header : headers)
 

            if (firstHeader) 
                response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, "SameSite=None;"));
                firstHeader = false;
                continue;
            
            response.addHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, "SameSite=None;"));
        
    

    @Override
    public void destroy() 

    


我将此添加为 addFilterBefore(new SameSiteFilter(),BasicAuthenticationFilter.class) 和 addFilterAfter(new SameSiteFilter(),BasicAuthencticationFilter.class) 在 HttpSecurity 中配置

无论如何都要为 jsessionid 设置 SameSite=None

【问题讨论】:

【参考方案1】:

我使用的是嵌入式 tomcat 8.54,它没有将 samesite 设置为 none,而是适用于其他值,例如 lax、strict。所以更新将tomcat嵌入到8.58,我猜他们修复了那个错误。所以,更新tomcat版本解决了我的问题

【讨论】:

兄弟,你能提供完整的项目或更新的代码吗?我也有同样的问题!

以上是关于无法为 spring boot 1.5.22 设置 cookie samesite=none的主要内容,如果未能解决你的问题,请参考以下文章

将cookie设置为安全时Spring Boot无法登录

无法使用 Hibernate 在 Spring Boot 中将 MongoDB 设置为自动递增

无法使用 Spring Boot + GORM + Gradle 设置 NamingStrategy

spring boot jsp文件无法查看

无法在 Spring Boot 中为 Hikari 设置 keepAlive Time 配置

使用 KeycloakAutoConfiguration 无法使用 Spring Boot Security UnsatisfiedDependencyException 设置 Keycloak