2010-06-17 75 views
2

我希望同時具有表單身份驗證和基本身份驗證。您是否可以使用Spring 3進行表單和基本身份驗證

如果請求像https://username:[email protected]/那樣使用基本認證。 如果請求來自https://mysite.com表單身份驗證使用。

這可能嗎?

+0

您是否確實意味着用戶能夠在瀏覽器中使用它,並且具有BASIC類型的行爲,沒有過期,沒有註銷等,或者您只是希望能夠從命令行工具中啓動服務器? – Affe 2010-06-17 16:30:10

回答

3

是的,這是可能的。

假設您正在使用命名空間配置,這非常簡單。默認情況下,如果您在http元素上使用自動配置,它們都會啓用。請參閱springsecurity3參考文檔的第2.2節。您可以使用http元素上的領域屬性爲基本身份驗證設置自定義領域。表單和基本身份驗證都將使用任何身份驗證提供程序配置。

如果您未在http元素上使用自動配置,您只需將<http-basic />標記作爲子元素添加到http元素即可啓用基本身份驗證。可能性很好,您對錶單身份驗證的默認配置不感興趣,因此標記可能會更復雜一點。

礦看起來像這樣:

<form-login login-page="/login.html" 
     default-target-url="/home.html" always-use-default-target="true" 
     authentication-success-handler-ref="authenticationSuccessHandler" 
     authentication-failure-handler-ref="authenticationFailureHandler" 
     login-processing-url="/j_spring_security_check" /> 

顯然,這是必要的,以允許對/login.html路徑匿名訪問。該頁面需要呈現提交給/ j_spring_security_check的表單,該表單將被過濾器攔截,查找用戶名和密碼,並根據配置的身份驗證提供程序進行身份驗證。如果您深入瞭解其他名稱空間,您會發現可以覆蓋字段的名稱等。

我不確定spring是否始終默認使用表單驗證,除非提供了授權標頭在請求中,它缺少有效的用戶名/密碼對,或者它缺省爲第一個過濾器或最後一個,或者是什麼。但實驗應該可以讓你很容易地弄清楚。查看第8章的最後一節和第9章的第一部分,它看起來好像它會將所有未經身份驗證的用戶發送到表單入口點,除非請求中存在授權標頭,在這種情況下,將導致身份驗證失敗在對客戶端的基本身份驗證所需響應中。如果您想手動配置所有內容而不是使用命名空間,第8章和第9章也是您看的地方。

身份驗證成功處理程序和身份驗證失敗處理程序必須實現AuthenticationSuccessHandler和AuthenticationFailureHandler,並允許您自定義過濾器如何響應成功和失敗的身份驗證嘗試。他們不是必需的。

1

我剛剛觀看了Ben Alex的Spring Security的介紹。

基本上,他的小應用程序使用表單身份驗證,但如果您按照鏈接,滾動到'29:00',他談論的基本身份驗證支持開箱即用。

相關問題