如何阻止Spring Boot添加会话cookie?

2023-11-29

我有一个 Spring Boot Web 应用程序,我正在尝试将其设为无状态。在我的 WebSecurityConfigurerAdapter 中我设置了

    http
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)

但应用程序(使用 Thymeleaf 模板)通过附加“不断重写图像和脚本的 URL”;jsessionid=<some_session_id>" 添加到文件名中。除了给我一个我不想要的 cookie 之外,它还有一个恼人的副作用,即 Spring Security 会阻止请求,因为它的 URL 中有一个分号!

百里香叶说这是预期和期望的行为并表示这不是他们的错:Thymeleaf 只是要求“Servlet API”重写 URL,而我们应该“在 Tomcat 上下文级别配置应用程序”来解决问题。

那么,我该怎么做呢?我有一个用于授权的自定义 JWT cookie,因此我根本不需要会话 cookie,当然在重写的 URL 中也不需要。


The jsessionid行为,与 STATELESS 无关。

最初,servlet 容器不知道客户端(浏览器)是否支持 cookie。

因此,在第一次请求页面时(通常是 HTTP GET):

  1. Servlet 容器将附加;jsessionid=...到所有 URL。
  2. servlet 容器将(尝试)设置一个 cookiejsessionid.

当点击链接或提交公式(HTTP GET/POST)时,浏览器会将 cookie 发送回服务器,当且仅当浏览器确实首先接受了 cookie 设置。 现在,servlet 容器可以识别,是否jsessionid来自 cookie(通过 HTTP 请求标头传输)或 URL。

If the jsessionid源自 cookie,servlet 容器将停止追加;jsessionid=...到 URL。 如果jsessionid源自您单击的 URL,它将继续附加;jsessionid=到所有 URL。

这与 STATELESS 或任何其他配置无关SessionCreationPolicy.

查看 Spring Security 文档SessionCreationPolicy:

/** Always create an {@link HttpSession} */
ALWAYS,
/**
 * Spring Security will never create an {@link HttpSession}, but will use the
 * {@link HttpSession} if it already exists
 */
NEVER,
/** Spring Security will only create an {@link HttpSession} if required */
IF_REQUIRED,
/**
 * Spring Security will never create an {@link HttpSession} and it will never use it
 * to obtain the {@link SecurityContext}
 */
STATELESS

Update:

要通过 URL 禁用跟踪模式,请设置以下属性:

server.servlet.session.tracking-modes: COOKIE

See: https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何阻止Spring Boot添加会话cookie? 的相关文章

随机推荐

  • Lua __lt 不与 table.sort 一起使用,即使它已定义

    我有一个继承自实体类的图块类 实体类定义了 lt 虽然我可以从图块类访问它 但当我尝试将所有图块放入 table sort 时 出现 比较两个表 错误 实体类 local Entity function Entity New pos obj
  • plt。在子图中仅适用于一个图

    我是 python 新手 所以我希望我的问题足够好 我正在尝试根据两个不同的数据框创建两个子图 我的问题是 当我尝试定义标题和 xlim 时 它仅适用于一个图 这是我的脚本 fig axes plt subplots 1 2 figsize
  • Android Camera2 API 拉伸预览

    我正在使用 Google 示例项目 但如果不拉伸它 我似乎无法让预览正常工作 public void setAspectRatio int width int height if width lt 0 height lt 0 throw n
  • 如何消除 Jquery 中的冲突?

    我是 JQuery 新手 我在我的页面中使用了 2 个 jQueries 对于第一个 JQuery 我的脚本是这样的 现在 当我像这样使用第二个 jQuery 时 我丢失了第一个 jQuery 无法加载
  • Clearcase:将子分支移动到主分支

    在clearcase中 我开始在一个名为的分支上工作main release4 release5 在我开始工作后 release4 被合并到 main 中 我的同事开始开发 main release5 无论如何我可以移动我的main rel
  • 如果两个可能条件中的任何一个成立,则 maven-antrun-plugin 跳过目标

    我可以通过以下方式将两个属性 A 和 B 传递给 maven mvn test DA true or mvn test DB true 如果定义了 A 或 B 我希望跳过目标 我发现当只考虑A时这是可能的
  • 删除Delphi中标签之间变量子字符串的所有实例

    我正在将 HTML 中的可读文本提取到字符串中 并且需要删除之间的现有文本标签 实现这一目标最有效的方法是什么 现在我正在这样做 function RemoveIEScripts const s string string var i In
  • 如何在 Linux Mint 上防止一致的 java 暂停模式

    我有一个在 Linux Mint 上运行的 Java 应用程序 每一分钟 程序都会显示出非常明显的减慢 暂停 停顿时间持续 3 到 4 秒 当我们运行同一程序的更多实例时 它们也会每分钟暂停 3 到 4 秒 每个节目在一分钟的不同秒停止 最
  • 通过 Google Apps 帐户通过 C# 发送电子邮件

    我有一个标准的 Google Apps 帐户 我已通过 Google Apps 设置了自定义域 当我使用 Gmail 界面时 我能够通过 Google Apps 成功发送和接收电子邮件 但是 我想通过代码发送电子邮件 为了尝试这个 我一直在
  • 运营转型库?

    我正在寻找一个库 它允许我在多个用户之间实时同步文本 ala Google Docs 我偶然发现了运营转型 它似乎符合我的需求 话虽如此 我了解 OT 的要点 但不了解 OT 的数学或实施 因此 我想知道是否有一个拖放 JavaScript
  • 如果不可用,Schema.org dateModified 是否应该有一些默认值?

    对于 Schema orgArticle我收到错误https developers google com structured data testing tool for dateModified 建议使用 dateModified 字段
  • 搞乱编码和 XslCompiledTransform

    我正在搞乱编码 一方面 我有一个以 UTF 8 格式响应我的 url 我非常确定 感谢 firebug 插件 我使用以下代码打开读取 UTF 8 格式内容的 url StreamReader reader new StreamReader
  • 姜戈 CSRF 403

    获取 CSRF 403 下面的 console log 语句确认我正在获取令牌 我正在将请求提交到本地服务器上的同一域 internal csrfToken cookie csrftoken internal csrfSafeMethod
  • 使用线程调用 Py_Finalize 时出现 AssertionError(仅限 3.X)

    当我从与 python 调用不同的 C 线程调用 C API 的 Py Finalize 时 我收到错误输出 我看到的错误是 Exception ignored in
  • 使用 Mockito 匹配特定类型的空列表

    我有一个需要一些参数的方法 其中之一是某个类的 List 并且 null 是该参数的可接受值 public void doStuff String string Nullable List
  • 将参数传递给重写的 OnEndPage 方法

    我需要将参数传递给 OnEndPage 方法的重写版本 当我声明该参数时 我没有收到任何错误 但当我调用该方法时 它告诉我 无法将 void 隐式转换为 itextsharp text pdf ipdfpageevent 这是我的 OnEn
  • 配置 SQL*Plus 以仅返回数据

    我需要编写一个简单的 shell 函数 该函数从 Oracle DB 返回单个字段 举例来说SELECT ABC FROM dual ABC就是我所追求的 这是我的功能 function getSomeOraVal sqlplus USER
  • VBA有ATan2函数吗?

    我想计算一下atan2在 VBA 中 但我不确定该函数是否存在 或者甚至不确定在哪里可以找到内置 VBA 函数的规范列表 我没有使用 Excel 因此无法调用工作表 I could 实施 atan2我自己 但如果可能的话我宁愿避免这样做 正
  • 在 PHP 5.4 中禁用严格标准

    我目前在 php 5 4 上运行一个网站 在此之前我在 5 3 8 上运行我的网站 不幸的是 php 5 4 结合了E ALL and E STRICT 这意味着我之前的设置error reporting现在不起作用 我之前的值是E ALL
  • 如何阻止Spring Boot添加会话cookie?

    我有一个 Spring Boot Web 应用程序 我正在尝试将其设为无状态 在我的 WebSecurityConfigurerAdapter 中我设置了 http sessionManagement sessionCreationPoli