日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

spring security

 wjw_595 2014-05-13

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

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

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

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

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

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

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

查看更多精彩圖片

 

 

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

 

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

<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)證成功,會將一個Authentication對象放到會話中,否則,如果認(rèn)證失敗,會將控制轉(zhuǎn)交給認(rèn)證入口點(通過authenticationEntryPoint屬性裝配)

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

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

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

    </bean>

 

4) basicProcessingFilterEntryPoint 
  通過向瀏覽器發(fā)送一個HTTP401(未授權(quán))消息,提示用戶登錄。
處理基于HTTP的授權(quán)過程, 在當(dāng)驗證過程出現(xiàn)異常后的"去向",通常實現(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屬性取值并不存在太多的實際含義,運行時,”Acegi First Realm Name“字符串會顯示在IE瀏覽器彈出的HTTP BASIC認(rèn)證對話框中。

 

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

<bean id="exceptionTranslationFilter"

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

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

    </bean>

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

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

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

<bean id="authenticationManager"

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

        <property name="providers">

            <list>

                <ref local="daoAuthenticationProvider" />

            </list>

        </property>

    </bean>

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多