Acegi(四):Acegi初体验及初剖解
当前位置:以往代写 > JAVA 教程 >Acegi(四):Acegi初体验及初剖解
2019-06-14

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

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 "们设置的的呢?且看下回.

    关键字:

在线提交作业