Vue/SpringBoot:为什么我的 JSESSIONID 不断变化
P粉163951336
2023-08-29 19:12:16
<p>我有一个带有 Spring Boot 3.0.1 后端的 vue 应用程序,我想使用 CSRF。 Vue 前端和 Spring Boot 后端由不同的系统提供服务。我打算使用 nginx 反向代理来缓解 CORS 主题,但是无论是否涉及 nginx,都会出现这个问题。</p>
<p>我的 vue 应用程序做的第一件事是请求 csrf 令牌,将其存储在全球范围内,以便在用户会话期间使用它。</p>
<p>当用户登录时,会初始化几个 pinia 存储。但不幸的是,在这些请求期间,每个请求发送的 JSESSIONID Cookie 都会被后端忽略,并发出一个新的 JSESSIONID。在使用应用程序并发出进一步的 GET 请求时,JSESSIONID 不断变化</p>
<p>这使得初始 JSESSIONID 的“全局”存储的 CSRF 令牌当然无效......</p>
<p>“csrf”请求标头:</p>
<p>“登录”标题:</p>
<p>然后突然间,第 5 个请求获得了一个新的 JSESSIONID,尽管我在请求中发送了 JSESSIONID Cookie(由服务器发送 - 为什么?</p>
<h2>问题</h2>
<p>为什么我的会话不断变化?我的 JSESSIONID 不应该始终保持不变吗?</p>
<p>进行 CSRF 的目的是什么?在发出任何(非 GET?)请求之前请求新令牌? (我的获取使用“凭据:“同源””)</p>
我的SecurityConfig中有
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
,这导致了麻烦......据我所知,删除它解决了CSRF的使用。 p>