Spring Security 4会话管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuxing9345/article/details/79253333

Spring Security 4会话管理

博客描述使用spring security4.1.0版本,其他版本可能会稍有不同,仅用于作学习记录,也给各位网友作参考,可能会存在不足之处,望见谅并指正。本篇博客主要讲述spring security中多个用户不能使用同一个帐号同时登录系统,不涉及会话管理的其他部分内容。

1.配置web.xml文件

首先需要在web.xml文件中添加spring security会话监听器,该监听器主要用于监听会话的创建和销毁,配置如下

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

2.在spring security配置文件中配置会话管理器

<http auto-config="true" use-expressions="false">
    <session-management session-authentication-strategy-ref="sas" />
</http>

<beans:bean id="sas" class="org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy">
    <beans:constructor-arg>
        <beans:list>
            <beans:bean class="org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy">
                    <beans:constructor-arg name="sessionRegistry" ref="sessionRegistry"/>
                    <beans:property name="maximumSessions" value="2" />
                    <beans:property name="exceptionIfMaximumExceeded" value="true" />
            </beans:bean>
            <beans:bean class="org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy" />
            <beans:bean class="org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy">
                <beans:constructor-arg name="sessionRegistry" ref="sessionRegistry" />
            </beans:bean>
        </beans:list>
    </beans:constructor-arg>
</beans:bean>

<beans:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" />

以上配置为最简洁配置,只需要上述配置即可控制同一帐号只能供2个客户端(浏览器)登录,一般还需要加上ConcurrentSessionFilter。从单词很容易看出来关键配置在什么地方,即CompositeSessionAuthenticationStrategy bean的maximumSessions构造器参数当中,该参数就是表示同一帐号最多可供多少个客户端登录,将其设置为1,那么一个帐号只能供一个客户端登录,当某帐号已经在线时,使用另一个浏览器登录同一帐号会出现不可预料的结果。至于是什么结果,也是可配置的,这被称为会话管理策略。比如我们可配置为后登录的用户把前面登录的用户踢下线,或者禁止已经登录的帐号在另外的客户端登录等等。

猜你喜欢

转载自blog.csdn.net/liuxing9345/article/details/79253333