Acegi(四):Acegi初体验及初解剖

上篇博客中,我们以静态地角度对Acegi的核心概念及其实现上的核心部件进行了谈讨,本这篇中,我们将结合一个Web程序来体会并介绍下在Web项目中配置Acegi里都有哪些关键点。

我们知道Acegi可以多种实用场景,但现在用的最多的还是在Web项目中,这里不再介绍配置的具体步骤,直接将一个配置好的Web项目传了上来(只做了那些必要的配置),见附件,不出意外的话,这个例子可以在Eclipse里直接运行,Eclipse版本为3.4.0。

下面的介绍都是以这个Web例子为介绍的, 大家最好先把例子下载下来体会下, 先大致地看下web.xml和application_acegi_context.xml这两个文件的内容, 以对Acegi的配置有个直观的印象.

咱们从web.xml文件开始.

我们看到这个文件特简单, 一共就context-param,filter,filter-mapping,listener,welcome-file-list五个配置元素. 先从最熟悉的配置元素逐个排除.第一个 welcome- file-list不必多说, 排除掉. 再看listener,由于Acegi是建立在Spring框架上的, 这里通过listener来初始化Spring的Context是情理之中的, 也就不必再多考虑. 有了listener的理解基础,我们再看context-param也就明白了,这个元素把Acegi的配置文件 applicationContext-acegi-security.xml 提供给Spring.下面进入Acegi在Web应用中的关键部件Filter, 我们知道Acegi在Web应用方面的一个基本原理就是Servlet的Filter,这里配置中Filter实现类是 FilterToBeanProxy, 它有一个配置参数targetClass,其值为 FilterChainProxy, 这个Filter的配置很简单, 大多数 情况下我们可以直接从现有的例子中拷来就行, 很少需要做什么配置上的改动.不过,若想把Acegi工作原理及其工作细节搞明白的话,这个FilterToBeanProxy到 FilterChainProxy的转换是不能躲过的关键点,再进一步想, 看人家是怎么设计实现的对自己的"钱途"也是大有帮助的吧?从我自身的体会上来看, FilterToBeanProxy和 FilterChainProxy两个类在设计上很有"嚼头",我想着在另外的博客中单独来看它们的实现与给自己的启发, 这里我们先有这样的一个概念: FilterToBeanProxy在 doFilter时会从Spring的Context里get出 FilterChainProxy的实例, FilterChainProxy自身也是一个Filter的实现类,它在 applicationContext-acegi-security.xml文件中初始化, 这样, FilterToBeanProxy就把经过它的所有请求转给了 FilterChainProxy来处理, 这样就上了Acegi的道儿,也就是拦截下来的请求在真正做事前需得到Acegi的许可.

下面我们来看 applicationContext-acegi-security.xml文件,上面的分析我们得出,   FilterToBeanProxy把拦截下的请求交给了 FilterChainProxy来处理, 这个处理就是Acegi的核心概念Authentication和Authorization的实现.

在这个文件中我们首先看到如下的配置信息:

<bean id="filterChainProxy"
class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/login.jsp=#NONE#
/**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
</value>
</property>
</bean>

在上面介绍 web.xml文件内容时,我们提到FilterToBeanProxy从Spring的Contextget出 FilterToBeanProxy的实例,上面的配置信息让Spring来初始化 FilterChainProxy 类,随便说下, 这里 FilterChainProxy实现的id没有用到,再进一步想,Spring可以不用id再用类名就可以得到其实例.回到正题, FilterChainProxy类有一个名为 filterInvocationDefinitionSource 的属性, 通过这个属性, Acegi把拦截下来的请求再一次转移.

我们先看 filterInvocationDefinitionSource属性里又都有些什么?从上面我们看到, value里是一些字符串描述的信息,这里有一个与当前Acegi不相干的思考: setFilterInvocationDefinitionSource方法的参数类型是 FilterInvocationDefinitionSource,Spring是怎么把一个String类型的信息自动转成所需要的 FilterInvocationDefinitionSource类型的呢?这个问题在这里先不思考.回到正题, 属性 filterInvocationDefinitionSource里配置的关键信息是" /**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor ", 从下面的配置可以看出, httpSessionContextIntegrationFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor 几个Bean都是Filter接口的实现类,这几个Filter的实现类再调用上一篇博客里提到的"七剑" 实现Authentication和Authoriaztion的"理想".

那"七剑"是怎么与" httpSessionContextIntegrationFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor "们配置的的呢?且看下回.

时间: 2024-11-30 04:02:40

Acegi(四):Acegi初体验及初解剖的相关文章

新手RoR十分钟初体验Step By Step

http://yulimin.javaeye.com/blog/35929 关键字: rails   Ruby Rails RoR     新手RoR十分钟初体验Step By Step 声明一下,这是个新手启动的体验文章,高手不要看了...:) 1.安装RubyWindows用户去 http://rubyforge.org/ 的 http://rubyforge.org/projects/rubyinstaller/ 下载 One-Click Installer - Windows 安装即可,

Fireworks MX 之初体验2-2

在编者的苦口婆心,盛情邀请下,风云设计 的两位高手 风筝 和 心动为谁 终于答应,为广大朋友奉献对 Fireworks MX 的亲密接触后带来的初体验,为喜爱 Fireworks 的 fans 们作出贡献,特此鸣谢! 优化菜单面面观 四.Text(文本)菜单. 通过观察,发现最大的一个变化就是增加文本拼写检查功能:"Check Spelling"和"Spelling Setup",这个功能的增加使得其文本编辑能力似乎又有所增强了,不过感觉实际运用中的意思似乎不大.并

屌丝就爱尝鲜头——java8初体验

Java8已经推出,让我们看看他的魅力.让我们看看他改变较大的部分. 一.java8概述 Java8是由Oracle(甲骨文)公司与2014年3月27日正式推出的.Java8同时推出有3套语言系统,分别是Java SE8.Java SE Emebbled 8.Java ME8. Java SE8较以往的系统增强的功能有: ①增强了对集合式操作语言--lambda表达式的支持,"Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演

《张成功项目管理记(第2版)》一第二章 项目管理之初体验

第二章 项目管理之初体验 张成功项目管理记(第2版) 首次与IT项目管理知识体系亲密接触 下午一上班,张成功就迫不及待地敲开了资深项目经理李全才办公室的门.还没等张成功开口,李全才就笑着说:"我听公司领导说,你被委任为国内某省全省大集中电子政务行政办公系统建设项目的项目经理,恭喜你啊.我知道,你今天来找我,一定是想咨询如何管理这个项目,对吧?" 张成功点了点头,李全才示意张成功坐在他办公桌前的座椅上. 令张成功万万没有想到的是,只见李全才从抽屉里拿出一本装订略显粗糙的书(张成功定睛一看

《星际争霸2》人工智能研究环境 SC2LE 初体验

1 前言 2017年8月10号,DeepMind联合暴雪发布了星际争霸2人工智能研究环境SC2LE,从而使人工智能的研究进入到一个全新的阶段.这次,研究人工智能的小伙伴们可以边玩游戏边做研究了. 为了让更多的朋友了解SC2LE研究环境,我们在第一时间对其进行安装测试,并对DeepMind发布的pysc2代码进行分析,初步了解基于pysc2的RL开发方法.下面我们将一一进行介绍. 2 测试使用设备 Macbook Pro 13inch (MacOS Sierra) Alienware 13inch

PostgreSQL 数据库初体验

  10月15日,由山东华鲁科技咨询顾问高强老师在"DBA+济南群"进行了一次关于PostgreSQL数据库初体验的线上主题分享.小编特别整理出其中精华内容,供大家学习交流.   嘉宾简介    高强,"DBA+济南群"联合发起人.现就职于山东华鲁科技发展股份有限公司.擅长Oracle.AIX.Linux.PostgreSQL和DB2等产品的实施.运维和故障处理.曾是一名存储工程师,负责实施存储.双机和备份等产品,在接触到数据库产品后,一发不可收拾的投入了DBA的浩

ASP.NET2.0组件控件开发视频 初体验

原文:ASP.NET2.0组件控件开发视频 初体验                               ASP.NET2.0组件控件开发视频 初体验        录了视频,质量不是很好,大家体验下.我会重新录制的 如果不清楚,可以看看http://v.youku.com/v_show/id_XNDg0MTAxNjA=.html   系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发

超极本中的战斗本 联想Yoga 3 Pro上手初体验

[TechWeb报道]如果没有联想,世界将会怎样?这是联想一个经典的标语,联想即创意.革新为一体做产品,名族品牌联想公司再一次的证明了这一点,就在今天联想发布三款全新的Yoga系列新品,其中Yoga 3 Pro超极本首当其冲成为焦点,因为它再次打破了超极本设计局限,工程师们的创意在这款产品上体现的淋漓尽致,下面就一起来看看这款新品上手初体验吧.该款产品在工业设计上注入心血,在使用形态上可一机具备标准.帐篷.笔记本.平板等四种形态,一机四用还是很有实用价值的,可以用来满足不同用户的使用习惯,在外壳

【新闻晨报】ChinaJoy初体验:为何都在谈版权

中云网每天精选各科技媒体头条! 1.腾讯科技 <纽约时报>:优秀的媒体,失败的生意 http://tech.qq.com/a/20140801/008714.htm 进入数字化时代后,<纽约时报>同样陷入收入下滑的困境.2013年,这家媒体的整体收入仅为六年前的一半.于是它们决定不能再这样下去了,一个有追求的媒体不可能看着自己走向穷途却什么都不做. 2014年年初,<纽约时报>网站进行了七年以来的最大改版.随后他们不断抛出一系列新的收入提升方案,比如尝试新的广告形态,推