使用SpringJDBC会话管理用户会话

本文介绍了Spring会话在Web应用程序中管理用户会话的方法。Spring会话支持多种数据存储,将会话管理逻辑与应用分离,在集群环境使用良好,应用崩溃时会话数据不丢失,且切换会话存储容易。还详细说明了创建Spring Boot应用、配置会话属性、集成Spring Security等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

640?wx_fmt=gif

点击蓝字,关注Java高级部落


640?wx_fmt=png

导言

在Web应用程序中,用户会话管理对于管理用户状态至关重要。Spring会话是四种方法的实现,将会话数据存储在持久数据存储中。Spring会话支持多个数据存储,如RDBMS、Redis、Hazelcast、MongoDB等,以保存用户会话数据。


640?wx_fmt=jpeg


Spring会议福利

(1)Spring会话将会话管理逻辑与应用程序分离开来,使其更加宽容。

(2)Spring会话在数据库中保存信息,因此在具有多个服务器节点的集群环境中使用非常好。因此,我们不需要依赖粘性会话或会话复制逻辑。

(3)由于会话数据存储在数据库中,如果应用程序崩溃,用户会话数据不会丢失。当应用程序再次启动时,它会从数据库中获取用户会话。

(4)在会话存储之间切换很容易。只要更改配置,我们就可以从使用JDBC切换到Redis。


1

创建SpringBoot应用程序


让我们首先使用最新版本创建一个简单的Spring会话JDBC示例万维网, 保安, JPA, 氢,和会议先开始。我用过弹簧启动器生成项目。


640?wx_fmt=png


默认情况下,Spring启动程序将添加org.springframework.session:spring-session-core依赖。让我们把它改为spring-session-jdbc, 因为我们将使用JDBC后端。

640?wx_fmt=png


2

配置SpringJDBC会话属性


这,这个,那,那个application.properties 文件指定H2数据库配置和Spring会话属性。

640?wx_fmt=jpeg

我们增加了财产spring.session.store-type=jdbc. 在这里,我们指定使用JDBC来存储会话数据。


由于我们使用的是内存中的h2数据库,Spring会话创建了从脚本自动存储会话数据所需的以下表:

640?wx_fmt=jpeg

但是,如果我们要访问另一个RDBMS数据库,比如我的SQL,那么我们需要添加我的SQL依赖项。

640?wx_fmt=png

并在applicy.properties文件中添加我的SQL数据库配置

640?wx_fmt=png

使用spring.session.jdbc.initialize-schema财产。使用此属性,Spring将尝试使用脚本创建会话表classpath:org/springframework/session/jdbc/schema-@@platform@@.sql.  因此,在这种情况下,它将使用schema-mysql.sql

640?wx_fmt=png

如果我们指定spring.session.jdbc.initialize-schema=never,然后我们需要在手动执行脚本中创建会话表。在生产中,我们不启用自动创建/更新。


3

Spring会话与Spring安全性


我们使用SpringSecurity进行用户身份验证。因此,我们正在将Spring会话与SpringSecurity集成起来。


让我们将Spring安全性添加到我们的应用程序中:

640?wx_fmt=png

现在,我们创建SpringSecurityConfig 类以启用Spring安全性。

640?wx_fmt=jpeg

 @EnableWebSecurity 在我们的应用程序中启用Spring安全性。在这里,我们配置了两个用户,用户1和管理员,在配置方法中。


4

创建RestController


在这里,我们将创建一个HelloController 班级,等级我们将公开Hello REST端点,它将返回“HelloWorld”。

640?wx_fmt=png

 SpringBootApplication 班级,等级:

640?wx_fmt=png

这,这个,那,那个@EnableJdbcHttpSession注释创建了一个名为springSessionRepositoryFilter 它实现了过滤器。过滤器是负责替换HttpSession 实现由Spring会话支持。在这种情况下,Spring会话由关系数据库支持。默认情况下,会话超时为1800秒(30分钟)。


现在,如果我们运行SpringBoot应用程序和访问http://localhost:8080/hello,它应该重定向到自动生成的登录页面。现在,使用配置的用户登录并查看SPRING_SESSION桌子您可以看到登录用户名存储在PRINCIPAL_NAME 列。


总结

在本文中,我们了解了如何通过使用SpringBoot自动配置中配置非常小的Spring会话来有效地管理用户会话。只要简单地更改配置,我们就可以轻松地将后端从JDBC更改为Redis或HazeCast。


如果您有任何要添加或分享的内容,请在下面的评论部分中分享。



看到这里,你想不想踩在过来人的肩膀上,轻松实现专业技能的提升呢?不妨扫码加入java技术交流分享群,体验精彩公开课,还能免费领取更多学习资料。

640?wx_fmt=png

添加「java技术交流分享群」,开启你的技能提升之旅吧~



点击左侧二维码

关注【Java高级部落】

640?wx_fmt=jpeg640?wx_fmt=png640?wx_fmt=gif

点击“阅读原文”,查看更多~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值