《Spring Security》第十七章 Session Management - 会话管理

第十七章 Session Management - 会话管理

Http Session 相关的功能由 SessionManagementFilter 和 SessionAuthenticationStrategy 接口组合处理。

典型用法包括:Session 固化攻击预防、Session 超时检测、限制用户同时打开的会话数量等。

一、SessionManagementFilter

SessionManagementFilter 通过 SecurityContextRepository 来检查当前 SecurityContextHolder 中的内容,以此来确保当前用户已经通过了身份验证。

如果 repository 中包含 SecurityContext,则过滤器不做任何操作。如果没有,且 ThreadLocal 中 SecurityContext 包含一个(非匿名)身份验证对象,则该过滤器假定它们已经由之前的过滤器做了身份验证。

然后将调用已配置的 SessionAuthenticationStrategy。

如果用户没有经过身份验证,过滤器会检查是否请求了无效的 Session Id(如超市等),此时过滤器会调用 InvalidSessionStrategy。最常见的行为就是重定向至一个固定的额URL,由 SimpleRedirectInvalidSessionStrategy 实现。

二、SessionAuthenticationStrategy

Session 认证策略,既被 SessionManagementFitler 使用,也被 AbstractAuthenticationProcessingFilter 使用。因此,如果使用自定义表单登录类,则需要同时注入到这两个类中。

三、Concurrency Control 并发控制

Spring Security 能够防止主体对同一应用进行超过指定次数的并发身份验证。

如果您阻止用户从两个不同的会话登录到 web 应用程序。您可以终止他们以前的登录,也可以在他们尝试再次登录时报告错误,防止二次登录。但是,如果是第二种情况的话,如果用户没有显式的注销的话,在原 session 有效期间是无法登陆的。

四、Querying the SessionRegistry for currently authenticated users and their sessions

通过 SessionRegistry 查询当前登录的用户,以及用户的 sessions。

文章作者: koral
文章链接: http://luokaiii.github.io/2019/07/23/读书笔记/《SpringSecurity》/17.SessionManagement/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自