常言笑的家

          Spring, Hibernate, Struts, Ajax, RoR

          翻譯 acegi spring security引用

          Security命名空間配置
          2.1. 介紹

          從Spring-2.0開始可以使用命名空間的配置方式。 使用它呢,可以通過附加xml架構(gòu),為傳統(tǒng)的spring beans應(yīng)用環(huán)境語法做補(bǔ)充。 你可以在spring參考文檔得到更多信息。 命名空間元素可以簡單的配置單個(gè)bean,或使用更強(qiáng)大的,定義一個(gè)備用配置語法,這可以更加緊密的匹配問題域,隱藏用戶背后的復(fù)雜性。 簡單元素可能隱藏事實(shí),多種bean和處理步驟添加到應(yīng)用環(huán)境中。 比如,把下面的security命名元素添加到應(yīng)用環(huán)境中,將會(huì)為測試用途,在應(yīng)用內(nèi)部啟動(dòng)一個(gè)內(nèi)嵌LDAP服務(wù)器:

          <security:ldap-server />

          這比配置一個(gè)Apache目錄服務(wù)器bean要簡單得多。 最常見的替代配置需求都可以使用ldap-server元素的屬性進(jìn)行配置,這樣用戶就不用擔(dān)心他們需要設(shè)置什么,不用擔(dān)心bean里的各種屬性。 [1]。使用一個(gè)良好的XML編輯器來編輯應(yīng)用環(huán)境文件,應(yīng)該提供可用的屬性和元素信息。 我們推薦你嘗試一下 SpringSource工具套件 因?yàn)樗哂刑幚韘pring組合命名空間的特殊功能。

          要開始在你的應(yīng)用環(huán)境里使用security命名空間,你所需要的就是把架構(gòu)聲明添加到你的應(yīng)用環(huán)境文件里:


          <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:security="http://www.springframework.org/schema/security"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
          http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">
          ...
          </beans>


          在許多例子里,你會(huì)看到(在示例中)應(yīng)用,我們通常使用"security"作為默認(rèn)的命名空間,而不是"beans",這意味著我們可以省略所有security命名空間元素的前綴,使上下文更容易閱讀。 如果你把應(yīng)用上下文分割成單獨(dú)的文件,讓你的安全配置都放到其中一個(gè)文件里,這樣更容易使用這種配置方法。 你的安全應(yīng)用上下文應(yīng)該像這樣開頭

          <beans:beans xmlns="http://www.springframework.org/schema/security"
          xmlns:beans="http://www.springframework.org/schema/beans">
          ...
          </beans:beans>

          就在這一章里,我們都將假設(shè)使用這種語法。
          2.1.1. 命名空間的設(shè)計(jì)

          命名空間被用來設(shè)計(jì)成,處理框架內(nèi)最常見的功能,提供一個(gè)簡化和簡潔的語法,使他們在一個(gè)應(yīng)用程序里。 這種設(shè)計(jì)是基于框架內(nèi)的大型依賴,可以分割成下面這些部分:

          *

          Web/HTTP安全 - 最復(fù)雜的部分。設(shè)置過濾器和相關(guān)的服務(wù)bean來應(yīng)用框架驗(yàn)證機(jī)制, 保護(hù)URL,渲染登錄和錯(cuò)誤頁面還有更多。
          *

          業(yè)務(wù)類(方法)安全 - 可選的安全服務(wù)層。
          *

          AuthenticationManager - 通過框架的其它部分,處理認(rèn)證請求。
          *

          AccessDecisionManager - 提供訪問的決定,適用于web以及方法的安全。一個(gè)默認(rèn)的主體會(huì)被注冊,但是你也可以選擇自定義一個(gè),使用正常的spring bean語法進(jìn)行聲明。
          *

          AuthenticationProviders - 驗(yàn)證管理器驗(yàn)證用戶的機(jī)制。 該命名空間提供幾種標(biāo)準(zhǔn)選項(xiàng),意味著使用傳統(tǒng)語法添加自定義bean。
          *

          UserDetailsService - 密切相關(guān)的認(rèn)證供應(yīng)器,但往往也需要由其他bean需要。

          下一章中,我們將看到如何把這些放到一起工作。
          2.2. 開始使用安全命名空間配置

          在本節(jié)中,我們來看看如何使用一些框架里的主要配置,建立一個(gè)命名空間配置。 我們假設(shè)你最初想要盡快的啟動(dòng)運(yùn)行,為已有的web應(yīng)用添加認(rèn)證支持和權(quán)限控制,使用一些測試登錄。 然后我們看一下如何修改一下,使用數(shù)據(jù)庫或其他安全信息殘酷。 在以后的章節(jié)里我們將引入更多高級(jí)的命名空間配置選項(xiàng)。
          2.2.1. 配置web.xml

          我們要做的第一件事是把下面的filter聲明添加到 web.xml 文件中:


          <filter>
          <filter-name>springSecurityFilterChain</filter-name>
          <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
          </filter>

          <filter-mapping>
          <filter-name>springSecurityFilterChain</filter-name>
          <url-pattern>/*</url-pattern>
          </filter-mapping>


          這為Spring Security提供了一個(gè)調(diào)用鉤子。 然后我們準(zhǔn)備編輯application context文件。 web安全服務(wù)使用<http> 進(jìn)行元素配置。
          2.2.2. 最小 <http>配置

          只需要進(jìn)行如下配置就可以實(shí)現(xiàn)安全配置:

          <http auto-config='true'>
          <intercept-url pattern="/**" access="ROLE_USER" />
          </http>


          這表示,我們要保護(hù)應(yīng)用程序中的所有URL,只有擁有 ROLE_USER角色的用戶才能訪問。
          Note

          你可以使用多個(gè)<intercept-url>元素為不同URL的集合定義不同的訪問需求,它們會(huì)被歸入一個(gè)有序隊(duì)列中,每次取出最先匹配的一個(gè)元素使用。 所以你必須把期望使用的匹配條件放到最上邊。

          要是想添加一些用戶,你可以直接使用下面的命名空間直接定義一些測試數(shù)據(jù):

          <authentication-provider>
          <user-service>
          <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />
          <user name="bob" password="bobspassword" authorities="ROLE_USER" />
          </user-service>
          </authentication-provider>



          如果你熟悉以前的版本,你很可能已經(jīng)猜到了這里是怎么回事。 <http>元素會(huì)創(chuàng)建一個(gè)FilterChainProxy和filter使用的bean。 以前常常出現(xiàn)的,因?yàn)閒ilter順序不正確產(chǎn)生的問題,不會(huì)再出現(xiàn)了,現(xiàn)在這些過濾器的位置都是預(yù)定義好的。

          <authentication-provider>元素創(chuàng)建了一個(gè)DaoAuthenticationProvider bean,<user-service>元素創(chuàng)建了一個(gè)InMemoryDaoImpl。 一個(gè)ProviderManager bean通常是由命名空間過程系統(tǒng)創(chuàng)建的, DaoAuthenticationProvider自動(dòng)注冊到它上面。

          上面的配置定義了兩個(gè)用戶,他們在應(yīng)用程序中的密碼和角色(用在權(quán)限控制上)。 也可以從一個(gè)標(biāo)準(zhǔn)properties文件中讀取這些信息,使用user-service的properties屬性。 參考in-memory authentication獲得更多信息。 使用<authentication-provider>元素意味著用戶信息將被認(rèn)證管理用作處理認(rèn)證請求。

          現(xiàn)在,你可以啟動(dòng)程序,然后就會(huì)進(jìn)入登錄流程了。 試試這個(gè),或者試試工程里的"tutorial"例子。 上述配置實(shí)際上把很多服務(wù)添加到了程序里,因?yàn)槲覀兪褂昧薬uto-config屬性。 比如,表單登錄和"remember-me"服務(wù)自動(dòng)啟動(dòng)了。
          2.2.2.1. auto-config包含了什么?

          我們在上面用到的auto-config屬性,其實(shí)是下面這些配置的縮寫:

          <http>
          <intercept-url pattern="/**" access="ROLE_USER" />
          <form-login />
          <anonymous />
          <http-basic />
          <logout />
          <remember-me />
          </http>



          這些元素分別與form-login,匿名認(rèn)證,基本認(rèn)證,注銷處理和remember-me對應(yīng)。 他們擁有各自的屬性,來改變他們的具體行為。
          auto-config需要一個(gè)UserDetailsService

          使用auto-config的時(shí)候如果沒配置UserDetailsService就會(huì)出現(xiàn)錯(cuò)誤(比如,如果你使用了LDAP認(rèn)證)。 這是因?yàn)閞emember-me服務(wù)在auto-config="true"的時(shí)候啟動(dòng)了,它的認(rèn)證機(jī)制需要UserDetailsService來實(shí)現(xiàn)(參考Remember-me章獲得更多信息)。 如果你遇到了一個(gè)因?yàn)闆]定義UserDetailsService造成的問題,那就試著去掉auto-config配置(或者是其他你配置上的remember-me)。
          2.2.2.2. 表單和基本登錄選項(xiàng)

          你也許想知道,在需要登錄的時(shí)候,去哪里找這個(gè)登錄頁面,到現(xiàn)在為止我們都沒有提到任何的HTML或JSP文件。 實(shí)際上,如果我們沒有確切的指定一個(gè)頁面用來登錄,Spring Security會(huì)自動(dòng)生成一個(gè),基于可用的功能,為這個(gè)URL使用標(biāo)準(zhǔn)的數(shù)據(jù),處理提交的登錄,然后發(fā)送到默認(rèn)的目標(biāo)URL。 然而,命名空間提供了許多支持,讓你可以自定義這些選項(xiàng)。 比如,如果你想實(shí)現(xiàn)自己的登錄頁面,你可以使用:

          <http auto-config='true'>
          <intercept-url pattern="/login.jsp*" filters="none"/>
          <intercept-url pattern="/**" access="ROLE_USER" />
          <form-login login-page='/login.jsp'/>
          </http>



          注意,你依舊可以使用auto-config。 這個(gè)form-login元素會(huì)覆蓋默認(rèn)的設(shè)置。 也要注意我們需要添加額外的intercept-url元素,指定用來做登錄的頁面的URL,這些URL不應(yīng)該被安全filter處理。 否則,這些請求會(huì)被/**部分?jǐn)r截,它沒法訪問到登錄頁面。 如果你想使用基本認(rèn)證而不是表單登錄,可以把配置修改成如下所示:

          <http auto-config='true'>
          <intercept-url pattern="/**" access="ROLE_USER" />
          <http-basic />
          </http>



          基本身份認(rèn)證會(huì)被優(yōu)先用到,在用戶嘗試訪問一個(gè)受保護(hù)的資源時(shí),用來提示用戶登錄。 在這種配置中,表單登錄依然是可用的,如果你還想用的話,比如,把一個(gè)登錄表單內(nèi)嵌到其他頁面里。
          2.2.3. 使用其他認(rèn)證提供器

          現(xiàn)實(shí)中,你會(huì)需要更大型的用戶信息源,而不是寫在application context里的幾個(gè)名字。 多數(shù)情況下,你會(huì)想把用戶信息保存到數(shù)據(jù)庫或者是LDAP服務(wù)器里。 LDAP命名控件會(huì)在LDAP章里詳細(xì)討論,所以我們這里不會(huì)講它。 如果你自定義了一個(gè)Spring Security的UserDetailsService實(shí)現(xiàn),在你的application context中名叫"myUserDetailsService",然后你可以使用下面的驗(yàn)證。

          <authentication-provider user-service-ref='myUserDetailsService'/>



          如果你想用數(shù)據(jù)庫,可以使用下面的方式

          <authentication-provider>
          <jdbc-user-service data-source-ref="securityDataSource"/>
          </authentication-provider>



          這里的"securityDataSource"就是 DataSource bean在application context里的名字,它指向了包含著Spring Security用戶信息的表。 另外,你可以配置一個(gè)Spring Security JdbcDaoImpl bean,使用user-service-ref屬性指定。
          2.2.3.1. 添加一個(gè)密碼編碼器

          你的密碼數(shù)據(jù)通常要使用一種散列算法進(jìn)行編碼。 使用<password-encoder>元素支持這個(gè)功能。 使用SHA加密密碼,原始的認(rèn)證供應(yīng)器配置,看起來就像這樣:

          <authentication-provider>
          <password-encoder hash="sha"/>
          <user-service>
          <user name="jimi" password="d7e6351eaa13189a5a3641bab846c8e8c69ba39f" authorities="ROLE_USER, ROLE_ADMIN" />
          <user name="bob" password="4e7421b1b8765d8f9406d87e7cc6aa784c4ab97f" authorities="ROLE_USER" />
          </user-service>
          </authentication-provider>



          在使用散列密碼時(shí),用鹽值防止字典攻擊是個(gè)好主意,Spring Security也支持這個(gè)功能。 理想情況下,你可能想為每個(gè)用戶隨機(jī)生成一個(gè)鹽值,不過,你可以使用從UserDetailsService讀取出來的UserDetails對象中的屬性。 比如,使用username屬性,你可以這樣用:

          <password-encoder hash="sha">
          <salt-source user-property="username"/>
          </password-encoder>


          你可以通過password-encoder的ref屬性,指定一個(gè)自定義的密碼編碼器bean。 這應(yīng)該包含application context中一個(gè)bean的名字,它應(yīng)該是Spring Security的PasswordEncoder接口的一個(gè)實(shí)例。
          2.3. 高級(jí)web特性
          2.3.1. Remember-Me認(rèn)證

          參考Remember-Me章獲得remember-me命名空間配置的詳細(xì)信息。
          2.3.2. 添加HTTP/HTTPS信道安全

          如果你的同時(shí)支持HTTP和HTTPS協(xié)議,然后你要求特定的URL只能使用HTTPS,這時(shí)可以直接使用<intercept-url>的requires-channel屬性:

          <http>
          <intercept-url pattern="/secure/**" access="ROLE_USER" requires-channel="https"/>
          <intercept-url pattern="/**" access="ROLE_USER" requires-channel="any"/>
          ...
          </http>


          使用了這個(gè)配置以后,如果用戶通過HTTP嘗試訪問"/secure/**"匹配的網(wǎng)址,他們會(huì)先被重定向到HTTPS網(wǎng)址下。 可用的選項(xiàng)有"http", "https" 或 "any"。 使用"any"意味著使用HTTP或HTTPS都可以。

          如果你的程序使用的不是HTTP或HTTPS的標(biāo)準(zhǔn)端口,你可以用下面的方式指定端口對應(yīng)關(guān)系:


          <http>
          ...
          <port-mappings>
          <port-mapping http="9080" https="9443"/>
          </port-mappings>
          </http>


          你可以在Chapter 7, Channel Security找到更詳細(xì)的討論。
          2.3.3. 同步Session控制

          如果你希望限制單個(gè)用戶只能登錄到你的程序一次,Spring Security通過添加下面簡單的部分支持這個(gè)功能。 首先,你需要把下面的監(jiān)聽器添加到你的web.xml文件里,讓Spring Security獲得session生存周期事件:


          <listener>
          <listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
          </listener>

          然后,在你的application context加入如下部分:

          <http>
          ...
          <concurrent-session-control max-sessions="1" />
          </http>


          這將防止一個(gè)用戶重復(fù)登錄好幾次-第二次登錄會(huì)讓第一次登錄失效。 通常我們更想防止第二次登錄,這時(shí)候我們可以使用

          <http>
          ...
          <concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true"/>
          </http>


          第二次登錄將被阻止。
          2.3.4. OpenID登錄

          命名空間支持OpenID登錄,替代普通的表單登錄,或作為一種附加功能,只需要進(jìn)行簡單的修改:

          <http auto-config='true'>
          <intercept-url pattern="/**" access="ROLE_USER" />
          <openid-login />
          </http>


          你應(yīng)該注冊一個(gè)OpenID供應(yīng)器(比如myopenid.com),然后把用戶信息添加到你的內(nèi)存<user-service>中:

          <user name="http://jimi.hendrix.myopenid.com/" password="notused" authorities="ROLE_USER" />


          你應(yīng)該可以使用myopenid.com網(wǎng)站登錄來進(jìn)行驗(yàn)證了。
          2.3.5. 添加你自己的filter

          如果你以前使用過Spring Security,你應(yīng)該知道這個(gè)框架里維護(hù)了一個(gè)過濾器鏈,來提供它的服務(wù)。 你也許想把你自己的過濾器添加到鏈條的特定位置,或者讓已存在的過濾器,使用特定的版本。 你如何在命名空間配置里實(shí)現(xiàn)這些功能呢?過濾器鏈現(xiàn)在已經(jīng)不能之間看到了。

          過濾器順序在使用命名空間的時(shí)候是被嚴(yán)格執(zhí)行的。 每個(gè)Spring Security過濾器都實(shí)現(xiàn)了Spring的Ordered接口,這些過濾器在初始化的時(shí)候先被排好序了。 標(biāo)準(zhǔn)的過濾器在命名空間里都有自己的假名:

          Table 2.1. 標(biāo)準(zhǔn)過濾器假名和順序
          Alias Filter Class
          CHANNEL_FILTER ChannelProcessingFilter
          CONCURRENT_SESSION_FILTER ConcurrentSessionFilter
          SESSION_CONTEXT_INTEGRATION_FILTER HttpSessionContextIntegrationFilter
          LOGOUT_FILTER LogoutFilter
          X509_FILTER X509PreAuthenticatedProcessigFilter
          PRE_AUTH_FILTER Subclass of AstractPreAuthenticatedProcessingFilter
          CAS_PROCESSING_FILTER CasProcessingFilter
          AUTHENTICATION_PROCESSING_FILTER AuthenticationProcessingFilter
          BASIC_PROCESSING_FILTER BasicProcessingFilter
          SERVLET_API_SUPPORT_FILTER classname
          REMEMBER_ME_FILTER RememberMeProcessingFilter
          ANONYMOUS_FILTER AnonymousProcessingFilter
          EXCEPTION_TRANSLATION_FILTER ExceptionTranslationFilter
          NTLM_FILTER NtlmProcessingFilter
          FILTER_SECURITY_INTERCEPTOR FilterSecurityInterceptor
          SWITCH_USER_FILTER SwitchUserProcessingFilter


          你可以把你自己的過濾器添加到隊(duì)列中,使用custom-filter元素,使用這些名字中的一個(gè),來指定你的過濾器應(yīng)該出現(xiàn)的位置:

          <beans:bean id="myFilter" class="com.mycompany.MySpecialAuthenticationFilter">
          <custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/>
          </beans:bean>


          你還可以使用after 或 before屬性,如果你想把你的過濾器添加到隊(duì)列中另一個(gè)過濾器的前面或后面。可以使用"FIRST" 或 "LAST"來指定你想讓你的過濾器分別出現(xiàn)在隊(duì)列元素的前面或后面。
          2.3.6. 防止Session固定攻擊

          Session固定攻擊是一個(gè)潛在危險(xiǎn),當(dāng)一個(gè)惡意攻擊者可以創(chuàng)建一個(gè)session訪問一個(gè)網(wǎng)站的時(shí)候,然后說服另一個(gè)用戶登錄到同一個(gè)會(huì)話上(比如,發(fā)送給他們一個(gè)包含了session標(biāo)識(shí)參數(shù)的鏈接)。 Spring Security通過在用戶登錄時(shí),創(chuàng)建一個(gè)新session來防止這個(gè)問題。 如果你不需要保護(hù),或者它與其他一些需求沖突,你可以通過使用<http>中的session-fixation-protection屬性來配置它的行為,它有三個(gè)選項(xiàng)

          *

          migrateSession - 創(chuàng)建一個(gè)新session,把原來session中所有屬性復(fù)制到新session中。這是默認(rèn)值。
          *

          none - 什么也不做,繼續(xù)使用原來的session。
          *

          newSession - 創(chuàng)建一個(gè)新的“干凈的”session,不會(huì)復(fù)制session中的數(shù)據(jù)。

          2.3.7. 設(shè)置自定義AuthenticationEntryPoint

          如果你不使用命名空間里的表單登錄,OpenID或基本身份驗(yàn)證,你也許想定義個(gè)驗(yàn)證過濾器和入口點(diǎn),使用傳統(tǒng)的bean語法,把他們鏈接到命名空間里。 你可以像Section 2.3.5, “添加你自己的filter”里解釋的那樣,添加過濾器。 對應(yīng)的AuthenticationEntryPoint可以使用<http>中的entry-point-ref進(jìn)行設(shè)置。

          CAS例子,是一個(gè)在命名空間里使用自定義bean的好例子,包括這個(gè)語法。如果你不熟悉驗(yàn)證入口點(diǎn),可以看看技術(shù)縱覽章節(jié)中的討論。
          2.4. 保護(hù)方法

          Spring Security 2.0大幅改善了對你的服務(wù)層方法添加安全。 如果你使用Java 5或更高版本,還支持JSR-250的安全注解,同框架提供的@secured注解相似。 你可以為單個(gè)bean提供安全控制,通過使用intercept-methods元素裝飾bean聲明,或者你可以使用AspectJ方式的切點(diǎn)來控制實(shí)體服務(wù)層里的多個(gè)bean。
          2.4.1. <global-method-security>元素

          這個(gè)元素用來在你的應(yīng)用程序中啟用基于安全的注解(通過在這個(gè)元素中設(shè)置響應(yīng)的屬性),也可以用來聲明將要應(yīng)用在你的實(shí)體application context中的安全切點(diǎn)組。 你應(yīng)該只定義一個(gè)<global-method-security>元素。 下面的聲明同時(shí)啟用兩種類型的注解:

          <global-method-security secured-annotations="enabled" jsr250-annotations="enabled"/>


          2.4.1.1. 使用protect-pointcut添加安全切點(diǎn)

          protect-pointcut是非常強(qiáng)大的,它讓你可以用簡單的聲明對多個(gè)bean的進(jìn)行安全聲明。 參考下面的例子:

          <global-method-security>
          <protect-pointcut expression="execution(* com.mycompany.*Service.*(..))" access="ROLE_USER"/>
          </global-method-security>



          這樣會(huì)保護(hù)application context中的符合條件的bean的所有方法,這些bean要在com.mycompany包下,類名以"Service"結(jié)尾。 ROLE_USER的角色才能調(diào)用這些方法。 就像URL匹配一樣,指定的匹配要放在切點(diǎn)隊(duì)列的最前面,第一個(gè)匹配的表達(dá)式才會(huì)被用到。
          2.5. 默認(rèn)的AccessDecisionManager

          這章假設(shè)你有一些Spring Security權(quán)限控制有關(guān)的架構(gòu)知識(shí)。 如果沒有,你可以跳過這段,以后再來看,因?yàn)檫@章只是為了自定義的用戶設(shè)置的,需要在簡單基于角色安全的基礎(chǔ)上加一些客戶化的東西。

          當(dāng)你使用命名空間配置時(shí),默認(rèn)的AccessDecisionManager實(shí)例會(huì)自動(dòng)注冊,然后用來為方法調(diào)用和web URL訪問做驗(yàn)證,這些都是基于你設(shè)置的intercept-url和protect-pointcut權(quán)限屬性內(nèi)容(和注解中的內(nèi)容,如果你使用注解控制方法的權(quán)限)。

          默認(rèn)的策略是使用一個(gè)AffirmativeBased AccessDecisionManager ,以及RoleVoter 和AuthenticatedVoter。
          2.5.1. 自定義AccessDecisionManager

          如果你需要使用一個(gè)更復(fù)雜的訪問控制策略,把它設(shè)置給方法和web安全是很簡單的。

          對于方法安全,你可以設(shè)置global-security里的access-decision-manager-ref屬性,用對應(yīng) AccessDecisionManager bean在application context里的id:

          <global-method-security access-decision-manager-ref="myAccessDecisionManagerBean">
          ...
          </global-method-security>


          web安全安全的語法也是一樣,但是放在http元素里:

          <http access-decision-manager-ref="myAccessDecisionManagerBean">
          ...
          </http>


          2.5.2. 驗(yàn)證管理器

          我們大概知道命名空間配置會(huì)自動(dòng)為我們注冊一個(gè)驗(yàn)證管理器bean。 這是一個(gè)Spring Security的ProviderManager類,如果你以前使用過框架,應(yīng)該對它很熟悉了。

          你也許想為ProviderManager注冊另外的AuthenticationProvider bean,你可以使用<custom-authentication-provider>元素實(shí)現(xiàn)。比如:

          <bean id="casAuthenticationProvider"
          class="org.springframework.security.providers.cas.CasAuthenticationProvider">
          <security:custom-authentication-provider />
          ...
          </bean>


          另一個(gè)常見的需求是,上下文中的另一個(gè)bean可能需要引用AuthenticationManager。 這里有一個(gè)特殊的元素,可以讓你為AuthenticationManager注冊一個(gè)別名,然后你可以application context的其他地方使用這個(gè)名字。

          <security:authentication-manager alias="authenticationManager"/>

          <bean id="casProcessingFilter" class="org.springframework.security.ui.cas.CasProcessingFilter">
          <security:custom-filter position="CAS_PROCESSING_FILTER"/>
          <property name="authenticationManager" ref="authenticationManager"/>
          ...
          </bean>

          posted on 2008-06-26 15:19 常言笑 閱讀(673) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA/J2EE

          My Links

          Blog Stats

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 庆安县| 聂拉木县| 河南省| 油尖旺区| 海门市| 昌乐县| 博客| 区。| 甘孜县| 鄯善县| 靖安县| 紫金县| 清河县| 新龙县| 浮山县| 内丘县| 沛县| 宁德市| 买车| 台江县| 阳东县| 潮州市| 马关县| 石门县| 广丰县| 柳林县| 攀枝花市| 盈江县| 禹州市| 如皋市| 文山县| 牙克石市| 神木县| 苏尼特左旗| 湖州市| 宜君县| 惠来县| 百色市| 乌恰县| 中阳县| 逊克县|