如何在 JSESSIONID Cookie 中设置 SameSite=None

2023-12-03

我有一个托管在 Heroku 上的 Spring Boot API,当我尝试通过 Google Chrome 中的 Angular 应用程序访问它时(在 Firefox 中工作正常),我面临以下问题:

enter image description here

JSESSIONID cookie 似乎被阻止,因为它没有设置为 SameSite=None。但如何将其设置为 SameSite=None 呢?

以下是我的配置类:

安全配置:

@Configuration
@EnableWebSecurity
@Order(SecurityProperties.DEFAULT_FILTER_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private ClienteUserDetailsService clienteUserDetailsService;

    private static final String[] PUBLIC_MATCHERS = {"/login", "/logout", "/error.html", "/error"};

    private static final String[] PUBLIC_MATCHERS_GET = {"/login", "/logout", "/error.html", "/error"};

    private static final String[] PUBLIC_MATCHERS_POST = {"/login", "/logout"};

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable()
                .authorizeRequests()
                .antMatchers(HttpMethod.POST, PUBLIC_MATCHERS_POST).permitAll()
                .antMatchers(HttpMethod.GET, PUBLIC_MATCHERS_GET).permitAll()
                .antMatchers(PUBLIC_MATCHERS).permitAll()
                .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
                .anyRequest().authenticated()
                .and().formLogin()
                .and().httpBasic()
                .and().logout().logoutUrl("/logout").logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)))
                .clearAuthentication(true).invalidateHttpSession(true)
                .deleteCookies("JSESSIONID", "XSRF-TOKEN");
    }

    private CsrfTokenRepository getCsrfTokenRepository() {
        CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
        tokenRepository.setCookiePath("/");
        return tokenRepository;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder builder) throws Exception {
        builder.userDetailsService(clienteUserDetailsService)
                .passwordEncoder(passwordEncoder());
    }

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("**")
                        .allowedOrigins("http://localhost:4200", "https://dogwalk-teste.web.app")
                        .allowedMethods("POST, GET, PUT, OPTIONS, DELETE, PATCH")
                        .allowCredentials(true);
            }
        };
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
   

}

过滤器:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {

    @Context
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers",
                "X-PINGOTHER, Content-Type, X-Requested-With, Accept, Origin, Access-Control-Request-Method, "
                + "Access-Control-Request-Headers, Authorization, if-modified-since, remember-me, "
                + "x-csrf-token, x-xsrf-token, xsrf-token ");
        response.addHeader("Access-Control-Expose-Headers", "xsrf-token");
        response.addHeader("Access-Control-Allow-Headers", "x-csrf-token, x-xsrf-token");
        response.setHeader("Set-Cookie", "locale=pt-BR; HttpOnly; Secure; SameSite=None;");

        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

Spring Boot 2.6.0 现在支持 SameSite cookie 属性的配置:

通过属性进行配置

server.servlet.session.cookie.same-site=strict

通过代码配置

import org.springframework.boot.web.servlet.server.CookieSameSiteSupplier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MySameSiteConfiguration {
  @Bean
  public CookieSameSiteSupplier applicationCookieSameSiteSupplier() {
  return CookieSameSiteSupplier.ofStrict();
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JSESSIONID Cookie 中设置 SameSite=None 的相关文章

  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • manifest.mf 文件的附加内容的约定?

    Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
  • ExceptionConverter:java.io.IOException:文档没有页面。我正在使用 iText

    当我执行下面的代码时 File f new File c sample pdf PdfWriter getInstance document new FileOutputStream f document open System out p
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • 在 Spring Boot 应用程序中自动装配 ObjectMapper

    我需要在 Spring boot 应用程序中使用默认的 ObjectMapper 作为单例实例 我可以简单地在我的应用程序中 autowire ObjectMapper 在Spring boot应用程序中默认创建的实例 而不创建 Bean
  • 每个组织的 Spring Security 用户角色

    在我的应用程序中 我有一个名为组织的顶级实体 用户和组织之间的关系是多对多的 因此 我可能会遇到以下情况 用户拥有组织的角色 ROLE ADMIN 用户拥有组织的角色 ROLE USER 我需要确保当用户 A 访问 Organization
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • 独立数字正则表达式?

    我目前使用这个正则表达式 d 我可以得到2个字符串的问题 2112343 和很多 4 99 OR 4 99 和大量 2112343 我从两者都得到了这个 2112343 4 99 我只需要得到2112343 我怎样才能做到这一点 使用环视
  • imshow:标签为图像索引的任意函数

    imshow根据其列索引 x 轴 和行索引 y 轴 绘制矩阵 我希望轴标签不是索引 而是索引的任意函数 例如音调检测 imshow A aspect auto where A shape 88200 8 在 x 轴上 显示大约几个刻度 11
  • 创建一个最初为空但允许用户动态添加行的 Java 表模型

    我正在制作一个应用程序 其主要功能包含在 JTable 中 我需要使用 addRow 方法创建一个随附的表模型 用户在窗口中输入详细信息 然后单击 JButton 后 数据将被带入一个数组 该数组被传递到 addRow 方法以添加到表中 然
  • 带有 .click 方法的 jQuery 流沙插件

    我正在尝试将此 click 函数添加到我使用 jQuery 的流沙插件排序的每个图像中 li img click function var verticalCenter window height popupContent height 2
  • ShortestPath 找不到任何没有最大跳数限制的路径

    在我的图中 顶点 5 和 36 之间有一条路径 但是当我运行查询时 match n Id 5 m Id 36 p shortestPath n gt m return length p 我得到 0 行返回 当我向路径添加最大跳数限制时 我得
  • 不使用 AJAX 加载 XML 文件

    我想将静态 XML 文件加载到 HTML 中并在没有 AJAX 请求的情况下处理它 我不想发出 AJAX 请求 因为当在没有网络服务器的情况下查看该 html 文件时 这是我们的要求 Chrome 抛出以下错误并停止播放 XMLHttpRe
  • Android:如何以编程方式设置布局的大小

    作为 Android 应用程序的一部分 我正在构建一个按钮集 这些按钮是一组嵌套的 LinearLayout 的一部分 使用权重 我可以根据包含父 LinearLayout 的大小自动调整集合的大小 这个想法是 根据屏幕的像素数和密度 将包
  • 在空手道 API 模拟中,我没有按预期工作

    我正在探索 Karate API double 模拟 以进行集成测试 对于以下场景 我没有得到预期的嘲笑响应 我们将不胜感激您的帮助 我的设置 1 空手道模拟服务器在端口上使用路径匹配规则8001 http 本地主机 8001 工作 针对
  • 在 SVN 中组织共享 .net 程序集的最佳方式是什么?

    我们正在启动一个包含大量共享 net 程序集的新 SOA 项目 这些程序集的代码将存储在 SVN 中 在开发阶段 我们希望能够将这些程序集编码为一个完整的解决方案 并尽可能减少 SVN 摩擦 当项目进入更多的维护模式时 程序集将在单独的级别
  • 从数据加载 gif 到 QMovie 对象(无文件)

    我读过很多问题 其中大部分不在这个网站上 他们都提到 QMovie 必须用文件名调用 就像这样 anim QtGui QMovie Filename gif or self movie QMovie filename QByteArray
  • 对于此代码,为什么 PLINQ 比 LINQ 慢?

    首先 我在双核 2 66Ghz 处理器机器上运行它 我不确定 AsParallel 调用是否在正确的位置 我也直接在范围变量上尝试过 但仍然较慢 我不明白为什么 这是我的结果 进程非并行 1000 耗时 146 毫秒 并行处理 1000 耗
  • 如何返回 XPath 表达式的单个字符串值?

    这是我的 HTML div class single main h3 class description area Description h3 p bla bla bla br some text br some text here br
  • IE6/7 后退/前进按钮不更改 window.location.hash

    我有一个 ajax web 应用程序 JSF 2 0 它使用哈希进行导航 我在以下的帮助下使用了这两个事件触发这个答案 and setInterval 检查旧浏览器 主要是 IE6 7 中的值变化 执行此操作的 JavaScript 代码
  • 如何将 React Modal 与地图函数结合使用?

    我正在通过数据进行映射 我想单击图像并显示一个包含 data title 和 data info 的模式弹出窗口 每个模式仅显示我的数组中的最后数据 我读到所有模态都一起弹出 但我只看到最后一个 但我不太明白如何解决问题 尤其是 React
  • 字典中调度程序的 TypeScript 类型

    我目前正在尝试弄清楚如何创建一个类型化函数 该函数将根据其键调用以下对象 const commandOrQuery CREATE USER WITH PASSWORD CreateUserCommandHandler GET USERS G
  • 将 Angular 范围变量传递给 Javascript

    我有一个 Angular 范围变量 streetName 如何在此控制器 添加 范围下定义的 JavaScript 中访问 streetName 请帮忙 div StreetName streetName div
  • 使用 OpenSessionInViewFilter 时出现 No bean named 'sessionFactory' 错误

    我正在使用 Hibernate 的延迟加载 并且在将 OpenSessionInViewFilter 添加到我的 web xml 后 即使在定义要使用的 sessionFactory bean 之后 我也开始出现 sessionFactor
  • 我想使用 jquery 左右移动按钮

    我可以将按钮移动到左侧 但之后我如何才能再次将其移动到右侧 我也可以在这里使用延迟吗 这是我尝试过的代码 document ready function example animate 10 function example animate
  • R:如何从管道中的 Spark 连接(sparklyr)中的数据列中提取元素

    我有一个数据集如下 由于数据量较大 我通过sparklyr包 所以我只能使用管道语句 pos lt str sub csj helpful 2 neg1 lt str sub csj helpful 4 csj lt csj gt muta
  • 如何在 JSESSIONID Cookie 中设置 SameSite=None

    我有一个托管在 Heroku 上的 Spring Boot API 当我尝试通过 Google Chrome 中的 Angular 应用程序访问它时 在 Firefox 中工作正常 我面临以下问题 JSESSIONID cookie 似乎被