您的位置:首页 > 其它

Acegi安全框架的机制和使用经验介绍

2012-02-02 13:21 405 查看
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。安全涉及到两个不同的概念,认证和授权。认证是关于确认用户是否确实是他们所宣称的身份。授权则是关于确认用户是否有允许执行一个特定的操作。

我们先看一下Acegi实现,Acegi配置文件片段如下:

<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">

<property name="filterInvocationDefinitionSource">

<value><![CDATA[

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

PATTERN_TYPE_APACHE_ANT

/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,

anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor

]]></value>

</property>

</bean>

...

我们看到,它是由一些过滤器组成的,主要包含过滤器是session上下文集成(HttpSessionContextIntegrationFilter)、认证处理(authenticationProcessingFilter)、安全上下文控制(SecurityContextHolderAwareRequestFilter)、登录退出(logoutFilter)、记住我处理(rememberMeProcessingFilter)、匿名处理(anonymousProcessingFilter)、过滤拦截(filterInvocationInterceptor)。其中权限处理主要是通过这些过滤器来实现的,其中过滤拦截(filterInvocationInterceptor)中需要判断角色、资源,有不同的投票策略决定是否对请求资源限制访问。实现可以组件方式注入,可扩展,但是比较重量级。

上述是Acegi的过滤器处理的一个spring配置,真正在web容器中起作用,还要在web.xml中配置,如下:

...

<filter>

<filter-name>appSecurity</filter-name>

<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>

<init-param>

<param-name>targetClass</param-name>

<param-value>

org.acegisecurity.util.FilterChainProxy

</param-value>

</init-param>

</filter>

...

<filter-mapping>

<filter-name>appSecurity</filter-name>

<url-pattern>*.do</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>appSecurity</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

注:我们看到上述配置,是通过委托代理方式配置的,并配置在web上下文的路径映射。这样通过targetClass与Acegi的配置filterChainProxy实例关联起来,就可以在web容器中进行拦截过滤处理相应资源。

总体来说,Acegi实现还是功能集成度高、复杂、重量级的。笔者建议还是把它拆分成不同的功能部分,根据需要分别来用不同组件实现比较好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: