乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      spring security

       wjw_595 2014-05-13

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

      Acegi
      中提供的Filter不少,有十多個(gè),一個(gè)一個(gè)學(xué)起來比較復(fù)雜。但是對于我們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)證管理器和決策管理器。如下圖: 
      查看更多精彩圖片

      對于這兩種管理器,那也是不需要我們寫代碼的,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。對于Voter,我們一般選擇RoleVoter就夠用了,它會(huì)根據(jù)我們配置文件中的設(shè)置來決定是否允許某一個(gè)用戶訪問制定的Web資源。 

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

      查看更多精彩圖片

       

       

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

       

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

      <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對象放到會(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)證對話框中。

       

      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對象,否則會(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 對身份已被管理器替換的用戶進(jìn)行驗(yàn)證
              X509AuthenticationProvider 從X509認(rèn)證中獲取用戶信息驗(yàn)證身份
              TestingAuthenticationProvider 單元測試時(shí)使用

              每個(gè)認(rèn)證者會(huì)對自己指定的證明信息進(jìn)行認(rèn)證,如DaoAuthenticationProvider僅對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)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多