读书人

Spring技术黑幕深入解析Spring架构

发布时间: 2012-10-30 16:13:36 作者: rapoo

Spring技术内幕——深入解析Spring架构与设计原理(六)Spring ACEGI
Spring ACEGI
作为Spring丰富生态系统中的一个非常典型的应用,安全框架Spring ACEGI的使用是非常普遍的。尽管它不属于Spring平台的范围,但由于它建立在Spring的基础上,因此可以方便地与Spring应用集成,从而方便的为基于Spring的应用提供安全服务。
作为一个完整的Java EE安全应用解决方案,ACEGI能够为基于Spring构建的应用项目,提供全面的安全服务,它可以处理应用需要的各种典型的安全需求;例如,用户的身份验证、用户授权,等等。ACEGI因为其优秀的实现,而被Spring开发团队推荐作为Spring应用的通用安全框架,随着Spring的广泛传播而被广泛应用。在各种有关Spring的书籍,文档和应用项目中,都可以看到它活跃的身影。

Spring ACEGI的基本实现
关于ACEGI的基本设置,在这里就不多嗦了。我们关心的是ACEGI是怎样实现用户的安全需求的,比如最基本的用户验证,授权的工作原理和实现。
在ACEGI配置中,是通过AuthenticationProcessingFilter的过滤功能来启动Web页面的用户验证实现的。AuthenticationProcessingFilter过滤器的基类是AbstractProcessingFilter,在这个AbstractProcessingFilter的实现中,可以看到验证过程的实现模板,在这个实现模板中,可以看到它定义了实现验证的基本过程,如以下代码所示:

    public void decide(Authentication authentication, Object object, ConfigAttributeDefinition config)        throws AccessDeniedException {   //取得配置投票器的迭代器,可以用来遍历所有的投票器        Iterator iter = this.getDecisionVoters().iterator();        int deny = 0;        while (iter.hasNext()) {  //取得当前投票器的投票结果            AccessDecisionVoter voter = (AccessDecisionVoter) iter.next();            int result = voter.vote(authentication, object, config);  //对投票结果进行处理,如果是遇到ACCESS_GRANT的结果,授权直接通过  //否则,累计ACCESS_DENIED的投票票数            switch (result) {            case AccessDecisionVoter.ACCESS_GRANTED:                return;            case AccessDecisionVoter.ACCESS_DENIED:                deny++;                break;            default:                break;            }        }//如果有反对票,那么拒绝授权        if (deny > 0) {            throw new AccessDeniedException(messages.getMessage("AbstractAccessDecisionManager.accessDenied",                    "Access is denied"));        }// 这里对弃权票进行处理,看看是全是弃权票的决定情况,默认是不通过,这种处理情况,是由allowIfAllAbstainDecisions变量来控制的        // To get this far, every AccessDecisionVoter abstainedcheckAllowIfAllAbstainDecisions();    }


可以看到,在ACEGI的框架实现中,应用的安全需求管理,主要是由过滤器、验证器、用户数据提供器、授权器、投票器,这几个基本模块的协作一起完成的。这几个基本模块的关系,刻画出了ACEGI内部架构的基本情况,也是我们基于ACEGI实现Spring安全应用,需要重点关注的地方。
1 楼 huangtian549 2009-11-20 博主,你要出的书叫什么名字?哪个出版社出版?还有大约什么时候会出版,非常想看到您的大作。 2 楼 jiwenke 2009-11-21 huangtian549 写道博主,你要出的书叫什么名字?哪个出版社出版?还有大约什么时候会出版,非常想看到您的大作。
名字就叫《Spring技术内幕——深入解析Spring架构与设计原理》,起了一个英文名叫《Spring Framework Internal》,机械工业出版社出版。大约什么时候出版,我要去向出版社确认一下。这里的写的内容是书的一部分,因为内容比较多,发现用帖子贴出来似乎难度比较大。所以,我想还是用书的方式比较好。
多谢你的鼓励啊!! 3 楼 caoyangx 2009-11-21 acegi这里,你可会说的比较浅了。 4 楼 nfxu 2009-11-21 这个英文名里internal用的不好,用inside 5 楼 whaosoft 2009-11-21 acegi 这一块 讲的有点浅 6 楼 lengyun3566 2009-11-22 期待博主大作的出版 7 楼 treblesoftware 2009-11-22 等着看LZ的书了,一上市我就去书店买。 8 楼 jiwenke 2009-11-23 caoyangx 写道acegi这里,你可会说的比较浅了。
是的,一个是因为自己在安全领域没有太多的经验,另外,ACEGI是在应用领域,关注点也比较多,跟踪不上。如果大家有什么见解和观点,一起讨论,我会想办法把这些讨论扩展到书稿中体现出来。
9 楼 jiwenke 2009-11-23 treblesoftware 写道等着看LZ的书了,一上市我就去书店买。
多谢多谢啊,还请多指正啊。我听编辑说,12月中就可以上市了。
10 楼 jiwenke 2009-11-23 nfxu 写道这个英文名里internal用的不好,用inside
主要是英文还不够好啊,看到一本《Windows internal》就用来参考了..呵呵 11 楼 accphc 2009-11-23 有些期待。 12 楼 li445970924 2009-11-23 LZ 准备多少钱一本啊 出的书是和帖子一样么 有代码的.... 13 楼 zhonglinjun 2009-11-23 那个有springside acegi的技术说明手册啊.可以发给我一本不.我一直没怎么搞懂这个权限机制.
ljj_java@126.com
万分感谢. 14 楼 jiwenke 2009-11-23 li445970924 写道LZ 准备多少钱一本啊 出的书是和帖子一样么 有代码的....
定价主要要看出版社吧,帖子里的内容是书稿的一部分,里面基本上是以代码实现来作为线索讲解的,在这个基础上,再结合自己的一些理解。而代码基本上都是3.0的当时HEAD。

15 楼 linux1689 2009-12-23 告诉大家一个好消息,楼主的大作今日上市了,到这里可以查看:http://www.china-pub.com/196261,谢谢大家关注,欢迎大家提出批评意见。

读书人网 >软件架构设计

热点推荐