2013-01-10 33 views
0

我們正在從基於LDAP的認證轉向SSO(Oracle的WebGate)。如何在春季結合認證過濾器

現在對於基於LDAP的我們正在使用基於形式的認證(UsernamePasswordAuthenticationFilter)在FORM_LOGIN_FILTER的位置。

對於SSO用戶將被預先認證,並且將發送帶有他的用戶名的請求頭。我打算使用RequestHeaderAuthenticationFilterPRE_AUTH_FILTER的位置。

問題是我們需要同時存在這兩個過濾器,並根據屬性文件中的值在它們之間切換。這適用於SSO在生產中無法按預期工作的情況,因此我們可以輕鬆回退到LDAP。

我的問題是如何正確實現這一點。如果具有這些位置的兩個過濾器將同時出現,是否會有任何副作用?擴展這兩個過濾器並在繼承類中添加屬性檢查會更好嗎?還是創建複合過濾器會更好地處理它們之間的切換?

回答

1

由於表單登錄過濾器僅處理特定位置的請求(例如/ j_spring_security_check),因此使用該請求不會影響其他過濾器的功能。所以你原來的問題很簡單。您應該問的更重要的問題是如何處理未經身份驗證的請求。您需要確定新SSO解決方案的工作原理,並確定您是否可以構建可用於切換回在應用中顯示登錄表單的內容(並且您需要設計如何做出該決定 - 例如,標誌位於屬性文件或運行時決策中)。如果您正在考慮可以在短時間內實施的後備方案,但不介意重新啓動應用程序,那麼我會建議使用Spring配置文件。

+0

感謝您的答案戴夫。在我的情況下應用程序重新啓動切換是可以接受至於spring配置文件 - 我們不使用它們,通常使用bean別名處理env寬設置。關於個人筆記 - 我幾年前在觀看關於Spring Integration的演示文稿,並且永遠不會想象你會在stackoverflow上回答我的問題。生活是如何運作是很有趣的。 –