17.1. `BasicAuthenticationFilter`

17.1. BasicAuthenticationFilter

BasicAuthenticationFilter 負責以 HTTP 標頭攜帶的憑證來做基本驗證,它可以用來處理 Spring 遠端協定,如 Hessian 及 Burlap,或普通瀏覽器使用者端,如 Firefox 及 IE 所作的驗證請求。

RFC 1934,段落 11 定義了如何處理標準的 HTTP 基本驗證,BasicAuthenticationFilter 符合 RFC 規範。

基本驗證是很吸引人的驗證方式,因為絕大多數的使用者端都有部屬此方式,而且實作上非常簡單,它只是一個在 HTTP 標頭中定義的 Base64 編碼 username:password 字段。

17.1.1. 設定

要實作 HTTP 基本驗證,你需要將 BasicAuthenticationFilter 加入 filter 鍊。application context 應該包含 BasicAuthenticationFilter 以及它需要的合作者:

<bean id="basicAuthenticationFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="authenticationEntryPoint" ref="authenticationEntryPoint"/>
</bean>

<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
    <property name="realmName" value="Name Of Your Realm"/>
</bean>

設定當中的 AuthenticationManager 會處理每個驗證請求。

如果驗證失敗,則 AuthenticationEntryPoint 會用來重新嘗試驗證程序。你通常會將此 filter 與 BasicAuthenticationEntryPoint 結合使用,它會返回一個有著合適標頭的 401 回應以重試 HTTP 基本驗證。

如果驗證成功,產出的 Authentication 物件會被放入 SecurityContextHolder

如果驗證是成功的,或者因為 HTTP 標頭並沒有包含支援的驗證請求而沒有嘗試做驗證,filter 鍊還是會照常繼續,所以只有當驗證失敗而且 AuthenticationEntryPoint 被呼叫時,此 filter 鍊才會被打斷。