Acegi Demo
web.xml配置
代码:
<web-app>
...
<filter>
<filter-name>Acegi Filter Chain
Proxy</filter-name>
<filter-class>
org.acegisecurity.util.FilterToBeanProxy
</filter-class>
<init-param>
<param-name>targetBean</param-name>
<param-value>filterChainProxy</param-value>
</init-param>
</filter>
...
<filter-mapping>
<filter-name>Acegi Filter Chain Proxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
说明:
采用Web的过滤器,构造一个过滤器链代理。初始参数:
参数名
|
描述
|
targetBean
|
从Spring中查找Bean名一致的类,交由该类处理真正的Web过滤。推荐使用。
|
targetClass
|
从JVM中查找类名一致的类,交由该类处理真正的Web过滤。不同J2EE容器可能会导致不同结果,会被targetBean参数覆盖。不推荐使用。
|
init
|
初始值。可能值包括:
Ø lazy:延迟加载。主要解决由于Spring采用ContextLoaderServlet加载模式时有可能会晚于该filter而导致filter加载失败的问题。
|
lifecycle
|
指定生命周期。可能值包括:
Ø servlet-container-managed:容器托管。一般情况下,Acegi的Filter采用Spring的AOP回调,启动和结束调用beforeXxx()和afterXxx()方法。如果采用J2EE规范中提供的filter方法init()和destroy(),设置该参数。
|
acegi.xml配置
过滤器链(filterChainProxy)
代码:
<beans>
...
<!-- 过滤器链代理 -->
<bean id="filterChainProxy"
class="org.acegisecurity.util.FilterChainProxy">
<property
name="filterInvocationDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,
basicProcessionFilter,
exceptionTranslationFilter,
filterInvocationInterceptor
</value>
</property>
</bean>
...
</beans>
说明:
过滤器链,配置一组过滤器。参数:
参数
|
描述
|
filterInvocationDefinitionSource
|
指定一组过滤器的Bean名。
|
过滤器:
过滤器
|
描述
|
httpSessionContextIntegrationFilter
|
负责完成Acegi上下文与HTTP Session同步。
|
basicProcessionFilter
|
负责完成用户的认证。
|
exceptionTranslationFilter
|
负责处理认证和授权中出现的异常。
|
filterInvocationInterceptor
|
负责完成用户的授权。
|
Spring Bean关系图:
说明:每个图块为一个Spring Bean。斜体Bean和同名正体Bean为同一个Bean。
HTTP会话集成(httpSessionContextIntegrationFilter)
代码:
<!-- HTTP会话集成
-->
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
<property name="allowSessionCreation"
value="false" />
</bean>
说明:
负责完成Acegi上下文与HTTP Session同步。如果HTTP Session中存放了之前的认证信息,将其还原到Acegi上下文中。退出应用时会清除掉HTTP Session中的认证信息。参数:
Bean
|
参数
|
描述
|
httpSessionContextIntegrationFilter
HTTP会话集成
|
allowSessionCreation
|
是否创建Session。可能值包括:
Ø true:创建Session。默认值。
Ø false:不创建Session 。
|
基本认证(basicProcessionFilter)
代码:
<!-- HTTP基本认证
-->
<bean id="basicProcessionFilter"
class="org.acegisecurity.ui.basicauth.BasicProcessingFilter">
<property
name="authenticationManager"
ref="authenticationManager"
/>
<property
name="authenticationEntryPoint"
ref="basicProssingFilterEntryPoint"
/>
</bean>
<!-- 认证管理器 -->
<bean id="authenticationManager"
class="org.acegisecurity.providers.ProviderManager">
<property
name="providers">
<list>
<ref
local="daoAuthenticationProvider"
/>
</list>
</property>
</bean>
<!-- 认证源提供者 -->
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property
name="userDetailsService"
ref="inMemDaoImpl" />
</bean>
<!-- 用户信息提供者(内存级) -->
<bean id="inMemDaoImpl"
class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property
name="userMap">
<value>admin=password,ROLE_ADMIN</value>
</property>
</bean>
<!-- HTTP基本认证入口点 -->
<bean id="basicProssingFilterEntryPoint"
class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint">
<property
name="realmName" value="Acegi Demo Realm" />
</bean>
说明:
负责完成用户的认证,会调用认证管理器进行用户认证。如果认证不成功调用EntryPoint,构造返回信息,如401,浏览器会弹出对话框要求用户输入用户名和密码。需要指派认证管理器、认证源和EntryPoint。参数:
Bean
|
参数
|
描述
|
basicProcessingFilter
基本认证过滤器
|
authenticationManager
|
指派认证管理器。
|
authenticationEntryPoint
|
指派EntryPoint。
|
authenticationManager
认证管理器
|
providers
|
指派认证源提供者。多值。
|
daoAuthenticationProvider
DAO认证源提供者
|
userDetailsService
|
指派认证实现服务。
|
inMemDaoImpl
用户信息源(内存)
|
userMap
|
用户名/密码/角色信息,写死在配置文件中。一般用于演示。格式:
uid=pw,role
|
basicProssingFilterEntryPoint
基本认证入口点
|
realmName
|
返回到浏览器的提示信息:域名。
|
Spring Bean关系图:
说明:每个图块为一个Spring Bean。斜体Bean和同名正体Bean为同一个Bean。
异常处理(exceptionTranslationFilter)
代码:
<!-- 异常处理
-->
<bean id="exceptionTranslationFilter"
class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property
name="authenticationEntryPoint"
ref="basicProssionFilterEntryPoint" />
<property
name="createSessionAllowed" value="false" />
</bean>
说明:
负责处理认证和授权中出现的异常。如果出现异常,调用EntryPoint。参数:
Bean
|
参数
|
描述
|
exceptionTranslationFilter
异常处理过滤器
|
authenticationEntryPoint
|
指派EntryPoint。
|
createSeesionAllowed
|
是否创建Session。可能值包括:
Ø true:创建Session。默认值。
Ø false:不创建Session 。
|
Spring Bean关系图:
说明:每个图块为一个Spring Bean。斜体Bean和同名正体Bean为同一个Bean。
授权拦截(filterInvocationInterceptor)
代码:
<!-- 授权拦截
-->
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property
name="authenticationManager" ref="authenticationManager"
/>
<property
name="accessDecisionManager"
ref="httpRequestAccessDecisionManager"
/>
<property
name="objectDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/securedpage.jsp=ROLE_ADMIN
</value>
</property>
</bean>
<!-- 授权策略
-->
<bean id="httpRequestAccessDecisionManager"
class="org.acegisecurity.vote.AffirmativeBased">
<property
name="decisionVoters">
<list>
<ref
local="roleVoter" />
</list>
</property>
</bean>
<!-- 投票策略实现 -->
<bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter"
/>
负责完成用户的授权。给受保护的Web资源指定角色,指定授权策略。参数:
Bean
|
参数
|
描述
|
filterInvocationInterceptor
授权拦截器
|
authenticationManager
|
指派认证管理器。
|
accessDecisionManager
|
指派访问策略管理器。
|
objectDefinitionSource
|
Web资源/角色信息,写死在配置文件中。一般用于演示。格式:
/uri=role
|
accessDecisionManager
授权策略管理器
|
decisionVoters
|
指派投票策略。多值。
|
roleVoter
投票策略实现
|
无
|
|
Spring Bean关系图:
说明:每个图块为一个Spring Bean。斜体Bean和同名正体Bean为同一个Bean。
监听器
代码:
<!-- 认证监听器 -->
<bean
id="authenticationLoggerListener"
class="org.acegisecurity.event.authentication.LoggerListener" />
<!-- 授权监听器 -->
<bean id="authorizationLoggerListener"
class="org.acegisecurity.event.authorization.LoggerListener" />
说明:
监听Acegi的认证/授权过程,并生成日志。
完整关系图
说明:每个图块为一个Spring Bean。斜体Bean和同名正体Bean为同一个Bean。