我有一個運行在Tomcat 7上的java web應用程序。 我在後端使用Spring 3.2和Spring Security 3.1,通過/ api/**模式後的RESTful URL暴露API。使用Spring Security 3.1通過表單登錄和http基本安全保護相同的RESTful資源
Web應用程序的UI使用BackboneJS構建。我正在使用直接映射到RESTful URL的Backbone模型。
使用表單登錄身份驗證鎖定用戶界面,因此,如果用戶當前未通過身份驗證,則用戶總是會重定向到登錄屏幕。
我現在試圖使用http-basic認證將相同的RESTful URL公開給另一個外部服務。不幸的是,當保護相同的URL模式時,Spring似乎不允許我使用多個過濾器鏈。無論在配置文件中首先定義哪個優先。
我不願意爲相同的RESTful資源映射到單獨的URL模式,但似乎我可能沒有選擇。
這裏是我的(目前破碎)春季安全配置的重要樣本:
<!-- configure basic http authentication -->
<http pattern="/api/**" create-session="stateless">
<intercept-url pattern="/**" access="ROLE_USER"/>
<http-basic/>
</http>
<!-- configure form-login authentication -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/ui/login" access="permitAll" />
<intercept-url pattern="/ui/logout" access="permitAll" />
<intercept-url pattern="/ui/loginfailed" access="permitAll" />
<intercept-url pattern="/**" access="ROLE_USER" />
<custom-filter ref="ajaxTimeoutRedirectFilter" after="EXCEPTION_TRANSLATION_FILTER" />
<form-login login-page="/ui/login" default-target-url="/" authentication-failure-url="/ui/loginfailed" />
<logout logout-success-url="/ui/logout" />
<session-management invalid-session-url="/ui/login"/>
</http>
我的問題是: 是否可以配置兩個不同類型的安全性(HTTP基本和表單登錄)使用Spring Security的相同的URL模式?這種情況是否有最佳做法?
謝謝。
當未經身份驗證的用戶嘗試請求其中某個資源時,您希望優先考慮哪一個?使用基於表單的身份驗證,您將獲得302重定向到登錄頁面,使用基本身份驗證您會遇到401挑戰。除非您堅持認爲基本身份驗證客戶端必須預先包含授權標頭,而不是等待受到挑戰,否則我沒有看到如何在相同的URL上正確支持兩者。 – 2013-02-27 09:36:07
@IanRoberts這似乎是保護相同URL的主要問題。理想情況下,我希望安全服務足夠聰明,可以根據請求頭部進行選擇。現在,我傾向於使用單獨的URL來處理源自UI和外部服務的請求。這似乎是最簡單的方法。 – 2013-02-27 14:30:19