(14)—- Logout和SessionManager

最后更新于:2022-04-01 14:54:24

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" /> ~~~
';