认识安全框架acegi(5)

作者:ikon999 发布于:2008年11月14日 10:13

Acegi称受保护的应用资源为“安全对象”,这包括URL资源和业务类方法。我们知道在Spring AOP中有前置增强、后置增强、异常增强和环绕增强,其中环绕增强的功能最为强大——它不但可以在目标方法被访问前拦截调用,还可以在调用返回前改变返回的结果,甚至抛出异常。Acegi使用环绕增强对安全对象进行保护。

Acegi通过AbstractSecurityInterceptorInterceptor:拦截器)为安全对象访问提供一致的工作模型,它按照以下流程进行工作:

1 SecurityContext中取出已经认证过的Authentication(包括权限信息);

2 通过反射机制,根据目标安全对象和“配置属性”得到访问目标安全对象所需的权限;

3 AccessDecisionManager根据Authentication的授权信息和目标安全对象所需权限做出是否有权访问的判断。如果无权访问,Acegi将抛出AccessDeniedException异常,否则到下一步;

4 访问安全对象并获取结果(返回值或HTTP响应);

5 AbstractSecurityInterceptor可以在结果返回前进行处理:更改结果或抛出异常。

Acegi称受保护的应用资源为“安全对象”,这包括URL资源和业务类方法。我们知道在Spring AOP中有前置增强、后置增强、异常增强和环绕增强,其中环绕增强的功能最为强大——它不但可以在目标方法被访问前拦截调用,还可以在调用返回前改变返回的结果,甚至抛出异常。Acegi使用环绕增强对安全对象进行保护。

Acegi通过AbstractSecurityInterceptor为安全对象访问提供一致的工作模型,它按照以下流程进行工作:

1 SecurityContext中取出已经认证过的Authentication(包括权限信息);

2 通过反射机制,根据目标安全对象和“配置属性”得到访问目标安全对象所需的权限;

3 AccessDecisionManager根据Authentication的授权信息和目标安全对象所需权限做出是否有权访问的判断。如果无权访问,Acegi将抛出AccessDeniedException异常,否则到下一步;

4 访问安全对象并获取结果(返回值或HTTP响应); 5 AbstractSecurityInterceptor可以在结果返回前进行处理:更改结果或抛出异常。

安全对象和一般对象的区别在于前者通过Acegi的“配置属性”进行了描述,如“/view.jsp=PRIV_COMMON”配置属性就将“/view.jsp”这个URL资源标识为安全对象,它表示用户在访问/view.jsp时,必须拥有PRIV_COMMON这个权限。配置属性通过XML配置文件,注解、数据库等方式提供。安全对象通过配置属性表示为一个权限,这样,Acegi就可以根据Authentication的权限信息获知用户可以访问的哪些安全对象。

根据安全对象的性质以及具体实现技术,AbstractSecurityInterceptor拥有以下三个实现类:

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

l MethodSecurityInterceptor:当调用业务类方法的安全对象时,可通过该拦截器类实施环绕切面;

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

作者:ikon999
来源:北风技术专栏
原文链接:http://column.ibeifeng.com/51564/20081114226.shtml

( 内容完 )

添加收藏到:

您可能还对这些文章感兴趣:

  • 用Flex+Lucene+s2sh开发订餐系统开发第四步:前台皮肤替换功能实现
  • 类(class) PK 结构(struct)
  • 代码自我审查的一些体会
  • ikon999原创:Dwr2的日志代码分析
  • 改进架构,实现动态数据源,降低java维护
  • 由一个C++版本猜数字游戏引起的效率问题
  • Java类的基本运行顺序
  • 基于EJB3.0的留言板项目的开发全过程
  • 博客系统第一讲:课程介绍和系统分析
  • 过年了,进驻北风博客
  • 没有评论, 我来评论

    小贴士:评论需要管理员审核后才会显示。请不要发布与国家法律相抵触的言论,北风网将保留追究责任的权利。
    类似“顶”、“沙发”、“支持”之类没有营养的文字,对勤劳贡献的作者来说是令人沮丧的反馈信息。
    请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
    如果您发现自己的评论没有被审核或者不见了,请参考以上三条。

    每周之星

    陈臣陈臣

    七年Java和JEE开发经验,JEE应用设计和高级架构师,拥有Sun的多项Java和J2EE方面的技能认证,多年项目经理、技术部经理的管理经验。拥有全面、扎实的Java和JEE理论知识,丰富的JEE应用开发经验。

    更多作者:

  • Adam
  • ikon999
  • jk1234
  • jk2345
  • libin_8745
  • lifengxing
  • taohuang100
  • xingkong
  • 北风
  • 呆子
  • 子晨
  • 小白
  • 张章
  • 张维亮
  • 陈臣
  • 陶宝哥
  • 风风
  • 最新内容

    推荐内容

    标签

    分类