Acegi(四):Acegi初体验及初解剖[Java编程]
本文“Acegi(四):Acegi初体验及初解剖[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
上篇博客中,我们以静态地角度对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 "们配置的的呢?且看下回.
以上是“Acegi(四):Acegi初体验及初解剖[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |