小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

spring security

 wjw_595 2014-05-13

先來談一談Acegi的基礎(chǔ)知識(shí),Acegi的架構(gòu)比較復(fù)雜,但是我希望我下面的只言片語能夠把它說清楚。大家都知道,如果要對(duì)Web資源進(jìn)行保護(hù),最好的辦法莫過于Filter,要想對(duì)方法調(diào)用進(jìn)行保護(hù),最好的辦法莫過于AOP。Acegi對(duì)Web資源的保護(hù),就是靠Filter實(shí)現(xiàn)的。如下圖: 
查看更多精彩圖片
一般來說,我們的Filter都是配置在web.xml中,但是Acegi不一樣,它在web.xml中配置的只是一個(gè)代理,而真正起作用的Filter是作為Bean配置在Spring中的。web.xml中的代理依次調(diào)用這些Bean,就實(shí)現(xiàn)了對(duì)Web資源的保護(hù),同時(shí)這些Filter作為BeanSpring管理,所以實(shí)現(xiàn)AOP也很簡(jiǎn)單,真的是一舉兩得啊。 

Acegi
中提供的Filter不少,有十多個(gè),一個(gè)一個(gè)學(xué)起來比較復(fù)雜。但是對(duì)于我們Web開發(fā)者來說,常用的就那么幾個(gè),如下圖中的被紅圈圈標(biāo)記出來的: 

查看更多精彩圖片
從上到下,它們實(shí)現(xiàn)的功能依次是1、制定必須為https連接;2、從Session中提取用戶的認(rèn)證信息;3、退出登錄;4、登錄;5、記住用戶;6、所有的應(yīng)用必須配置這個(gè)Filter。 

一般來說,我們寫Web應(yīng)用只需要熟悉這幾個(gè)Filter就可以了,如果不需要https連接,連第一個(gè)也不用熟悉。但是有人肯定會(huì)想,這些Filter怎么和我的數(shù)據(jù)庫聯(lián)系起來呢?不用著急,這些Filter并不直接處理用戶的認(rèn)證,也不直接處理用戶的授權(quán),而是把它們交給了認(rèn)證管理器和決策管理器。如下圖: 
查看更多精彩圖片

對(duì)于這兩種管理器,那也是不需要我們寫代碼的,Acegi也提供了現(xiàn)成的類。那么大家又奇怪了:又是現(xiàn)成的,那怎么和我的數(shù)據(jù)庫關(guān)聯(lián)起來呢?別著急,其實(shí)這兩個(gè)管理器自己也不做事,認(rèn)證管理器把任務(wù)交給了Provider,而決策管理器則把任務(wù)交給了Voter,如下圖: 

查看更多精彩圖片
現(xiàn)在我要告訴你們,這里的ProviderVoter也是不需要我們寫代碼的。不要崩潰,快到目標(biāo)了。Acegi提供了多個(gè)Provider的實(shí)現(xiàn)類,如果我們想用數(shù)據(jù)庫來儲(chǔ)存用戶的認(rèn)證數(shù)據(jù),那么我們就選擇DaoAuthenticationProvider。對(duì)于Voter,我們一般選擇RoleVoter就夠用了,它會(huì)根據(jù)我們配置文件中的設(shè)置來決定是否允許某一個(gè)用戶訪問制定的Web資源。 

DaoAuthenticationProvider也是不直接操作數(shù)據(jù)庫的,它把任務(wù)委托給了UserDetailService,如下圖: 

查看更多精彩圖片

 

 

插入一些相關(guān)教程

 

2) httpSessionContextIntegrationFilter
  每次request前 HttpSessionContextIntegrationFilter從Session中獲取Authentication對(duì)象,在request完后, 又把Authentication對(duì)象保存到Session中供下次request使用,此filter必須其他Acegi filter前使用,使之能跨越多個(gè)請(qǐng)求。

<bean id="httpSessionContextIntegrationFilter"

        class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">

    </bean>

 

3) basicProcessingFilter 
  用于處理HTTP頭的認(rèn)證信息,如從Spring遠(yuǎn)程協(xié)議(如Hessian和Burlap)或普通的瀏覽器如IE,Navigator的HTTP頭中獲取用戶信息,將他們轉(zhuǎn)交給通過authenticationManager屬性裝配的認(rèn)證管理器。如果認(rèn)證成功,會(huì)將一個(gè)Authentication對(duì)象放到會(huì)話中,否則,如果認(rèn)證失敗,會(huì)將控制轉(zhuǎn)交給認(rèn)證入口點(diǎn)(通過authenticationEntryPoint屬性裝配)

<bean id="basicProcessingFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter">

        <property name="authenticationManager" ref="authenticationManager" />

        <property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint" />

    </bean>

 

4) basicProcessingFilterEntryPoint 
  通過向?yàn)g覽器發(fā)送一個(gè)HTTP401(未授權(quán))消息,提示用戶登錄。
處理基于HTTP的授權(quán)過程, 在當(dāng)驗(yàn)證過程出現(xiàn)異常后的"去向",通常實(shí)現(xiàn)轉(zhuǎn)向、在response里加入error信息等功能。

<bean id="basicProcessingFilterEntryPoint"

        class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint">

        <property name="realmName" value="Acegi First Realm Name" />

    </bean>

    其中,realmName屬性取值并不存在太多的實(shí)際含義,運(yùn)行時(shí),”Acegi First Realm Name“字符串會(huì)顯示在IE瀏覽器彈出的HTTP BASIC認(rèn)證對(duì)話框中。

 

5) exceptionTranslationFilter
  異常轉(zhuǎn)換過濾器,主要是處理AccessDeniedException和AuthenticationException,將給每個(gè)異常找到合適的"去向" 

<bean id="exceptionTranslationFilter"

        class="org.acegisecurity.ui.ExceptionTranslationFilter">

        <property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint" />

    </bean>

在此,如果認(rèn)證不通過將會(huì)將控制轉(zhuǎn)交給認(rèn)證入口點(diǎn)(通過authenticationEntryPoint屬性裝配)

6) authenticationManager
  起到認(rèn)證管理的作用,它將驗(yàn)證的功能委托給多個(gè)Provider,并通過遍歷Providers, 以保證獲取不同來源的身份認(rèn)證,若某個(gè)Provider能成功確認(rèn)當(dāng)前用戶的身份,authenticate()方法會(huì)返回一個(gè)完整的包含用戶授權(quán)信息的Authentication對(duì)象,否則會(huì)拋出一個(gè)AuthenticationException。
Acegi提供了不同的AuthenticationProvider的實(shí)現(xiàn),如:
        DaoAuthenticationProvider 從數(shù)據(jù)庫中讀取用戶信息驗(yàn)證身份
        AnonymousAuthenticationProvider 匿名用戶身份認(rèn)證
        RememberMeAuthenticationProvider 已存cookie中的用戶信息身份認(rèn)證
        AuthByAdapterProvider 使用容器的適配器驗(yàn)證身份
        CasAuthenticationProvider 根據(jù)Yale中心認(rèn)證服務(wù)驗(yàn)證身份, 用于實(shí)現(xiàn)單點(diǎn)登陸
        JaasAuthenticationProvider 從JASS登陸配置中獲取用戶信息驗(yàn)證身份
        RemoteAuthenticationProvider 根據(jù)遠(yuǎn)程服務(wù)驗(yàn)證用戶身份
        RunAsImplAuthenticationProvider 對(duì)身份已被管理器替換的用戶進(jìn)行驗(yàn)證
        X509AuthenticationProvider 從X509認(rèn)證中獲取用戶信息驗(yàn)證身份
        TestingAuthenticationProvider 單元測(cè)試時(shí)使用

        每個(gè)認(rèn)證者會(huì)對(duì)自己指定的證明信息進(jìn)行認(rèn)證,如DaoAuthenticationProvider僅對(duì)UsernamePasswordAuthenticationToken這個(gè)證明信息進(jìn)行認(rèn)證。

<bean id="authenticationManager"

        class="org.acegisecurity.providers.ProviderManager">

        <property name="providers">

            <list>

                <ref local="daoAuthenticationProvider" />

            </list>

        </property>

    </bean>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多