1. 程式人生 > >Spring Security教程(14)---- Logout和SessionManager

Spring Security教程(14)---- Logout和SessionManager

Logout的配置很簡單,只需要在http中加入下面的配置就可以了

<sec:logout invalidate-session="true" logout-url="/logout"
	logout-success-url="/login.jsp" />
invalidate-session是否銷燬Session

logout-url logout地址

logout-success-url logout成功後要跳轉的地址

Session管理中最簡單的配置方法是

<sec:session-management invalid-session-url="/login.jsp" />
意思就是Session失效時跳轉到login.jsp

配置同一事件,只能有一個使用者登入系統。

網上有的例子是這樣配置的

<sec:session-management invalid-session-url="/login.jsp" >
	<sec:concurrency-control error-if-maximum-exceeded="true"
		max-sessions="1" expired-url="/login.jsp"/>
</sec:session-management>
但是這種配置在3.2版本中不管用

在3.2版本中需要這樣配置

首先在web.xml中加入一下配置

<listener>
	<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
然後修改applicationContext-security.xml
	<sec:http access-decision-manager-ref="accessDecisionManager"
		entry-point-ref="authenticationEntryPoint">
		
		<sec:access-denied-handler ref="accessDeniedHandler"/>
		
		<sec:logout invalidate-session="true" logout-url="/logout"
			logout-success-url="/login.jsp" />

		<sec:session-management session-authentication-strategy-ref="concurrentSessionControlStrategy" />
		
		<sec:remember-me 
			authentication-success-handler-ref="authenticationSuccessHandler"
			data-source-ref="dataSource"
			user-service-ref="userDetailService"
		/>
			
		
		<sec:custom-filter ref="filterSecurityInterceptor" before="FILTER_SECURITY_INTERCEPTOR"/>
		<sec:custom-filter ref="captchaAuthenticaionFilter" position="FORM_LOGIN_FILTER"/>
		<sec:custom-filter ref="concurrencyFilter" position="CONCURRENT_SESSION_FILTER"/>
	</sec:http>

	<bean id="captchaAuthenticaionFilter" class="com.zrhis.system.security.CaptchaAuthenticationFilter">
		<property name="authenticationManager" ref="authenticationManager" />
		<property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
		<property name="authenticationSuccessHandler" ref="authenticationSuccessHandler" />
		<property name="filterProcessesUrl" value="/login.do" />
		<property name="sessionAuthenticationStrategy" ref="concurrentSessionControlStrategy" />
	</bean>
	
	<bean id="authenticationSuccessHandler" class="com.zrhis.system.security.SavedRequestLoginSuccessHandler">
		<property name="defaultTargetUrl" value="/index.jsp" />
		<property name="forwardToDestination" value="true" />
		<property name="alwaysUseDefaultTargetUrl" value="false" />
	</bean>
	<bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
		<property name="defaultFailureUrl" value="/login.jsp" />
	</bean>
	
	<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
		<property name="loginFormUrl" value="/login.jsp" />
	</bean>
	
	<bean id="concurrencyFilter" class="org.springframework.security.web.session.ConcurrentSessionFilter">
		<constructor-arg name="sessionRegistry" ref="sessionRegistry" />
		<constructor-arg name="expiredUrl" value="/sessionOut.jsp" />
	</bean>
	
	<bean id="concurrentSessionControlStrategy"
		class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
		<constructor-arg name="sessionRegistry" ref="sessionRegistry" />
		<property name="maximumSessions" value="1"></property>
	</bean>
	
	<bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" />