Spring Security--会话管理

简介: 就像登录qq一样,一个手机登录会将另外一个手机挤下线,这个就叫会话管理。这个东西非常简单,在默认情况下可以登录n多次,一旦开启,就不允许登录多个。什么是一个会话。

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

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

什么是一个会话。

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

image.gif

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

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

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

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

image.gif

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

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

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

image.gif

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

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

image.gif

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

image.gif

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

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

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

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

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

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

image.gif

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

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

我们重写一下User的方法

image.gif

image.gif

image.gif

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

image.gif

重启一下,看看效果。

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

相关文章
|
4月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
4月前
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
4月前
|
安全 Java 数据安全/隐私保护
解析Spring Security中的权限控制策略
解析Spring Security中的权限控制策略
|
5月前
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
208 4
Spring Security 6.x 微信公众平台OAuth2授权实战
|
5月前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
233 2
Spring Security 6.x OAuth2登录认证源码分析
|
5月前
|
安全 Java 数据安全/隐私保护
Spring Security 6.x 一文快速搞懂配置原理
本文主要对整个Spring Security配置过程做一定的剖析,希望可以对学习Spring Sercurity框架的同学所有帮助。
272 5
Spring Security 6.x 一文快速搞懂配置原理
|
5月前
|
安全 Java API
Spring Security 6.x 图解身份认证的架构设计
【6月更文挑战第1天】本文主要介绍了Spring Security在身份认证方面的架构设计,以及主要业务流程,及核心代码的实现
83 1
Spring Security 6.x 图解身份认证的架构设计
|
4月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
4月前
|
安全 Java 数据安全/隐私保护
使用Java和Spring Security实现身份验证与授权
使用Java和Spring Security实现身份验证与授权
|
4月前
|
存储 安全 Java
Spring Security在企业级应用中的应用
Spring Security在企业级应用中的应用