Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。安全涉及到两个不同的概念,认证和授权。认证是关于确认用户是否确实是他们所宣称的身份。授权则是关于确认用户是否有允许执行一个特定的操作。
我们先看一下Acegi实现,Acegi配置文件片段如下:
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor ... |
我们看到,它是由一些过滤器组成的,主要包含过滤器是session上下文集成(HttpSessionContextIntegrationFilter)、认证处理(authenticationProcessingFilter)、安全上下文控制(SecurityContextHolderAwareRequestFilter)、登录退出(logoutFilter)、记住我处理(rememberMeProcessingFilter)、匿名处理(anonymousProcessingFilter)、过滤拦截(filterInvocationInterceptor)。其中权限处理主要是通过这些过滤器来实现的,其中过滤拦截(filterInvocationInterceptor)中需要判断角色、资源,有不同的投票策略决定是否对请求资源限制访问。实现可以组件方式注入,可扩展,但是比较重量级。
上述是Acegi的过滤器处理的一个spring配置,真正在web容器中起作用,还要在web.xml中配置,如下:
... <filter> ... <filter-mapping> |
注:我们看到上述配置,是通过委托代理方式配置的,并配置在web上下文的路径映射。这样通过targetClass与Acegi的配置filterChainProxy实例关联起来,就可以在web容器中进行拦截过滤处理相应资源。
总体来说,Acegi实现还是功能集成度高、复杂、重量级的。笔者建议还是把它拆分成不同的功能部分,根据需要分别来用不同组件实现比较好。