SpringSecurity5 限制账号的登陆数

SpringSecurity5 限制账号的登陆数
双木老林回到序章
需要实现的目的
一个账号不能重复登陆,或强制登陆上一个账号,或后登陆的直接提示登陆失败。
实现步骤
单单实现的话,不难,更新一下配置类:
1 |
|
像上面,增加 http.sessionManagement().maximumSessions(1) 即可实现后登陆的顶掉先登陆的,先登陆的再次请求接口,会得到 This session has been expired (possibly due to multiple concurrent logins being attempted as the same user). 的错误信息。
如果不想踢掉先登陆的,而是限制后登陆的不允许登陆。则在上面的基础上增加 .maxSessionsPreventsLogin(true) 即可。如此,后登陆的会提示 已经超过了当前主体(1)被允许的最大会话数量 的错误信息。
想限制能登几个,就修改 .maximumSessions(1) 中的阿拉伯数字。
登录后无法登陆问题
自此,功能便实现了,但是如果你是使用后登陆者不被允许登陆这种方式的话,可能会出现退出登陆后无法再次登陆的问题。
原因:因为 spring security 通过监听 session 的销毁事件处理逻辑的,而登出的事件这里是通过 session 实现的,但是 session 本身的创建和销毁事件,并不会通知到 Spring 容器,所以会导致即时你登出了,但是 spring security 仍然认为你是登陆中,导致使用不允许后登陆者这种登陆方式的用户无法再次登陆。
解决方法也简单,首先要知道一个点,
评论
匿名评论隐私政策













