Spring Security 默认在哪里存储我的会话数据?

Posted

技术标签:

【中文标题】Spring Security 默认在哪里存储我的会话数据?【英文标题】:Where does Spring Security stores my session data by default? 【发布时间】:2020-08-24 09:17:01 【问题描述】:

我目前正在尝试为我的 Spring Boot 项目实施一些基本的安全结构,但我找不到关于身份验证过程中发生的事情的真正具体答案。基本上,我只是按照本教程进行操作:

https://leaks.wanari.com/2017/11/28/how-to-make-custom-usernamepasswordauthenticationfilter-with-spring-security

它似乎使用了默认的 Spring Security 协议和东西,我真的只实现了一个自定义过滤器,我的代码在其中检查 MongoDB 的现有用户,并且事情按预期工作。

问题是,Postman 告诉我,每当我成功登录时,我都会收到一个 JSESSIONID cookie,例如,这个 cookie 用于获取请求。如果有 SESSION ID,我假设 Spring 以某种方式知道如何将 ID 映射到用户,但是如何映射呢?我还没有为此设置任何数据库配置,Spring 似乎将该状态存储在某处。我如何访问它,或更改为我可以控制访问的数据库?

【问题讨论】:

【参考方案1】:

如果要将会话保存到数据库,可以添加org.springframework.session:spring-session-jdbc 依赖项。您可以从here 中为您的数据库选择sql 文件并创建表。

【讨论】:

我很欣赏这个提示,但我目前在 MongoDB 上,所以现在没有 SQL 真的有用。我的问题与了解 Spring Security 会话管理的内部工作原理以及如何用我自己的会话管理数据库覆盖它更相关。

以上是关于Spring Security 默认在哪里存储我的会话数据?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 在哪里存储其默认的日志记录设置

Maven Repository 上 4.1.1 中的 spring-security-web 在哪里?

默认情况下,Spring Boot 期望视图存储在哪里?

Spring Security 使用非spring默认的登陆页面,是如何跳转到登陆成功页面的?

Spring Security 5中的默认密码编码器

spring security 重定向登录时端口 8080 来自哪里?如何将其更改为使用端口 443?