4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
热卖商品
新闻详情
Acegi(四):Acegi初体验及初解剖 - rmn190 - ITeye博客
来自 : rmn190.iteye.com/blog/332... 发布时间:2021-03-25

    上篇博客中,我们以静态地角度对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\"
        
         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\"们配置的的呢?且看下回.

本文链接: http://acegi0.immuno-online.com/view-724502.html

发布于 : 2021-03-25 阅读(0)
公司介绍
品牌分类
联络我们
服务热线:4000-520-616
(限工作日9:00-18:00)
QQ :1570468124
手机:18915418616