一个完整的系统应该都要注销功能。先不着急先代码,首先想象一下,注销后,该出现什么页面呢?
注销后,是不是应该回到登陆页面,让用户重新登录,然后再重新判断过滤权限,一切从头开始。
具体开发步骤:
开发环境:
MyEclispe10.7.1+tomcat6.0.37+acegi1.0.5+spring2.0
项目目录如下: 其中readme主要用来记录本次验证目的
项目目录如下: 其中readme主要用来记录本次验证目的
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 通过过滤连形式,acegi提供很多filter,其中过滤器执行也有一定的顺序 ,同事支持正则和ant匹配-->
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
</value>
</property>
</bean>
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" />
<!-- 注销功能 因为此类没有默认的构造方法,有两个参数的构造方法 -->
<bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter">
<!-- 这是构造器注入方式,第一个参数-->
<constructor-arg value="/login.jsp"/>
<!-- 这是构造器注入方式,第二个参数,其中第二个参数是list参数 -->
<constructor-arg>
<list>
<bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/>
</list>
</constructor-arg>
</bean>
<!-- 表单认证处理filter -->
<bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
<!-- 认证管理器,然后委托给Provides -->
<property name="authenticationManager" ref="authenticationManager"/>
<!-- 认证失败后转向的url,包含出错信息的的登陆页面 -->
<property name="authenticationFailureUrl" value="/login.jsp?login_error=1"/>
<!-- 登陆成功后转向的url -->