gpt4 book ai didi

java - 设置 JSESSIONID cookie 的 SameSite 属性 - JHipster 应用程序

转载 作者:行者123 更新时间:2023-12-04 13:55:31 31 4
gpt4 key购买 nike

我正在尝试在我们的 JHipster 网关中设置 JSESSIONID cookie 的 SameSite 属性,并在尝试在 Chrome 中进行验证时,在 SameSite 列下没有显示任何内容。
可能需要注意 :我们目前没有在 HTTP(本地主机地址)上本地部署和运行应用程序。然而,在 TLS 模式下运行也有同样的问题。
为了使这个工作正常,我尝试了两件事:

  • 此处第一个答案的第二种方法 How to enable samesite for jsessionid cookie - 在 configure() 中 JHipster 的 SecurityConfiguration.java 文件中使用的过滤器方法。
    import java.io.IOException;
    import java.util.Collection;

    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletResponse;

    import org.springframework.http.HttpHeaders;

    public class SameSiteFilter implements javax.servlet.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); // add SameSite=strict cookie attribute
    }

    private void addSameSiteCookieAttribute(HttpServletResponse response) {
    Collection<String> headers = response.getHeaders(HttpHeaders.SET_COOKIE);
    boolean firstHeader = true;
    for (String header : headers) { // there can be multiple Set-Cookie attributes
    if (firstHeader) {
    response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, "SameSite=Strict"));
    firstHeader = false;
    continue;
    }
    response.addHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, "SameSite=Strict"));
    }
    }

    @Override
    public void destroy() {

    }
    }
  • 一个 CookieSerializer我们从内部合作伙伴那里得到的:
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.session.web.http.DefaultCookieSerializer;
    import org.springframework.session.web.http.CookieSerializer;

    @Configuration
    class CookieConfiguration {

    @Bean
    public static CookieSerializer cookieSerializer() {
    DefaultCookieSerializer serializer = new DefaultCookieSerializer();
    serializer.setSameSite("Lax");
    return serializer;
    }
    }

  • 这些都不起作用。对于这种特殊的 Spring flavor ,我们还有什么可以尝试的吗?

    最佳答案

    如果您使用的是 Tomcat(即不是 WebFlux),以下配置将添加 SameSite=strict到所有 cookie,包括 JSESSIONID :

    @Configuration
    public class SameSiteCookieConfiguration implements WebMvcConfigurer {

    @Bean
    public TomcatContextCustomizer configureSameSiteCookies() {
    return context -> {
    final Rfc6265CookieProcessor cookieProcessor = new Rfc6265CookieProcessor();
    cookieProcessor.setSameSiteCookies("strict");
    context.setCookieProcessor(cookieProcessor);
    };
    }

    }

    关于java - 设置 JSESSIONID cookie 的 SameSite 属性 - JHipster 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63237187/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com