Acegi  它允许得用IocAop进行权限控制。其本质是将系统的权限控制独立出来,单独由Acegi进行管理控制,成为构建在Spring基础上企业应用的首选安全控制框架。

 

AuthenticationManager(认证管理器)

AccessDecisionManager(访问控制管理器)

SecurityContextHolder是框架级的容器,它保存着和所有用户关联SecurityContext实例,SecurityContext承载着用户(也称认证主体)的身份信息的权限信息, AuthenticationManager、AccessDecisionManager将据此进行安全访问控制。

 

首先从它保存用户信息的类说起:

SecurityContextHolder是Acegi框架级的对象,它在内部通过ThreadLocal为请求线程提供线程绑定的 SecurityContext对象(关于ThreadLocal参考

http://www.cnblogs.com/kuyijie/archive/2011/09/28/2194013.html

),而SecurityContext对象中具有Authentication对象,而此对象保存有用户的信息(如用户名、密码、角色等)。而在整个Acegi中可能通过HttpSessionContextIntegrationFilter将SecurityContextHolder类中的静态静态对象进行取出(一般配置在最前面的Filter)保存(在安全性验证完后)。而中间的其它的Filter基本都是为本线程取到的Authentication对象进行操作而进行的,如验证管理器进行验证,得到需要的用户安全验证信息,取得验证的信息主要有两端,一个是直接从页面上取得用户提供的被验证信息和系统保存的验证信息进行匹配(这就是登陆的Filter,信息的来源可以直接是页面上用户的输入也以是cookie等)。得到后再使用AccessDecisionManager(访问控制管理器)就要登上舞台了,它根据前得到的认证主体,而进行访问控制。如果授权验证没有通过则直接抛出异常,所以在它之前应该配置一个捕获异常的Filter,在此Filter中进行跳转(如转到登陆页面等)。

 

访问它安全控制分三种:URL资源访问控制、业务领域方法访问控制、领域对象访问控制

1URL资源访问控制

 对就的类为:FilterSecurityInterceptor:对URL资源的安全对象进行调用时,通过该拦截器实施环绕切面。该拦截器使用Servlet过滤器实现AOP切面,它本身就是一个Servlet过滤器;

 

 

2、业务领域方法的访问控制

 MethodSecurityInterceptor:当调用业务类方法的安全对象时,可通过该拦截器类实施环绕切面,它是得用了Spring中的切面。

 

 

 

3、领域对象访问控制

 AspectJSecurityInterceptor:和MethodSecurityInterceptor类似,它是针对业务类方法的拦截器,只不过它通过AspectJ实施AOP切面,它是利用Spring中的切面

posted on 2011-09-28 11:47  叩亦杰  阅读(394)  评论(0编辑  收藏  举报