acegi并发控制httpsession

acegi控制并发httpsession

在一些应用场合,企业可能需要限制同一账号在同一时间登录到同一web应用的次数,即并发控制httpsession数量。比如同一时间只允许admin/password用户在服务区端存在一个或若干个活动的httpsession。

acegi内置了这一并发控制的支持,要使用这一支持,需要完成以下步骤:

1、在acegi的配置文件中做如下配置:

    <bean id="concurrentSessionFilter" class="org.acegisecurity.concurrent.ConcurrentSessionFilter">

 <property name="sessionRegistry" ref="sessionRegistry" />

 <property name="expiredUrl"><value>/hello.html</value></property>

<bean>

<bean id="sessionRegistry" class="org.acegisecurity.concurrent.SessionRegistryImpl" />

此外,别忘了将配置的concurrentSessionFilter过滤器添加到过滤器链中

2、一旦认证管理器成功认证了authentication请求,providerManager会立即调用conurrentSessionController验证当前用用户登录信息。

    所以要在acegi配置文件中添加如下配置:

<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">

...

<property name="sessionController" ref="concurrentSessionController">

</bean>

<bean id="concurrentSessionController" class="org.acegisecurity.concurrent.ConcurrentSessionControllerImpl">

<property name="maximumSession" value="1" /> <!--表示允许用户创建的最大并发session -->

<property name="sessionRegistry" ref="sessionRegistry" />

<property name="exceptionIfMaximumExceeded" value="false" /><!-- 表示并发数量已达到后是否抛出异常-->

在实际应用中,开发者往往会将exceptionIfMaximumExceeded属性设置为false,这也是较好的做法,这是因为很多浏览器用户往往不会显示退出已登录的web应用,而是直接将浏览器关闭。

3、在web.xml文件中配置如下监听器:

    <listener>

<listener-class>org.acegisecurity.ui.session.HttpSessionEventPublisher</listener-class>

    <listener>

通过上述过程我们即启用了httpsession并发控制。

你可能感兴趣的:(bean,应用服务器,配置管理,企业应用,Acegi)