Spring Security--会话管理

就像登录qq一样,一个手机登录会将另外一个手机挤下线,这个就叫会话管理。

这个东西非常简单,在默认情况下可以登录n多次,一旦开启,就不允许登录多个。

什么是一个会话。

我们简单理解就是一个浏览器的同一个用户算一个用户,比如谷歌,你添加访客登录

 打开的新窗口就是另一个会话

不同浏览器之间也是不同的会话。

我们只需要简单的配置一下,就可以实现,这边登录,那边下线的效果。

在security的执行链中添加以下配置

 我们设置最大的并发数为1,也就是一个用户只可以在一台设备上登录

注:这里有人会在加了这个后

 出现报红,怎么办呢,再加一个and()

 这里只要看到and的返回值是httpsecurity就好了,是的话就不用继续,不是就继续加一个。

这个地方解释一下为什么会出现俩个and的情况。

 如图,在这个层级还可以配置一些会话的其他策略,比如:超过了一个了怎么办,是把上一个踢掉还是怎么办,就是说这个会话策略里还有其他配置,你目前处于这个层级,是会话配置的层级。当你and()以后,你会回到选择到和会话同一级地方,

 同样的,回到这一级又可以配其他策略,比如session的策略,就是在这一级。

可以把这个链看成一个菜单.sessionManagement()让你菜单进去了一层,.maximumSessions(1)

又让你进去了一层,此时返回就需要两次,也就是两个and。

在服务器,Spring Security维护了一个会话注册表,所有的登录上来的用户,都会注册到这个注册表中,本质上是一个map集合,key是用户对象,value保存了用户所有的会话对象,Map<User,List<Session>>。

当用户注销登录时,用户的session会被字段销毁,但是在map中的session不会自动移除,所以当用户注销时,将List的集合中的用户的对应会话移除掉。

这个也很简单,只需要在spring容器中注册一个Bean就可以了。

 到了这个位置,就会有人会出现一个问题,设置的会话怎么看都没起作用,设置了最大会话为1,其他会话一样可以登录,且一起的也没退出。这是为什么?

我们回到这个map里Map<User,List<Session>>,map的key是当前的用户对象,用对象做map的key一般来说需要重写equals和hashcode方法,不然每次登录上来,User对象都是现场new出来的,可不就出问题了吗。

我们重写一下User的方法

 

 用户名已经是唯一的了,我这里就只选用户名,一直next,结束。

 

 重启一下,看看效果。

此时所有的配置都生效了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Security 提供了会话管理的功能,用于管理用户的登录会话。 默认情况下,Spring Security 使用基于 HttpSession 的会话管理机制。在用户登录成功后,Spring Security 会在 HttpSession 中存储用户的认证信息,并生成一个唯一的会话标识(Session ID)。后续的请求中,用户的会话标识会被发送到服务器,Spring Security 将根据会话标识来验证用户的身份。 Spring Security 提供了多种配置选项来自定义会话管理的行为。下面是一些常用的配置选项: 1. 会话超时时间:可以配置会话的最大空闲时间,超过这个时间用户会被认为已经注销并要求重新登录。 2. 并发登录控制:可以配置系统允许的最大同时登录用户数,超过这个数目后新登录的用户将会踢掉之前登录的用户。 3. 会话固定:可以配置会话是否被固定,即每次用户登录成功后生成新的会话标识,防止会话劫持攻击。 4. 注销处理:可以配置用户注销操作的逻辑,比如清除会话信息并重定向到登录页面。 你可以通过在 Spring Security 的配置文件中进行相应的配置来管理会话。另外,Spring Security 还提供了一些 API 来获取当前用户的会话信息,比如获取会话 ID、获取最后访问时间等。 需要注意的是,Spring Security会话管理是基于 Servlet 容器提供的 HttpSession 来实现的,因此需要确保你的应用程序运行在支持 HttpSession 的容器中。 希望这些信息能够对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海上生日朋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值