是否有可能在Spring安全中使用命名空間配置提及基於表單的身份驗證和基本身份驗證,而不覆蓋其他?這樣應用程序可以同時爲基於瀏覽器的請求和遠程客戶端提供服務。春季安全 - 如何提及基於表單的身份驗證和基本身份驗證
回答
似乎不可能使用名稱空間配置聲明表單和基本身份驗證。
的引用鏈接到Spring社區: http://forum.springsource.org/showthread.php?t=72724&highlight=form+basic+authentication
你想要的是可能最終的結果,我已經跑成完全相同的問題,這裏是我的解決方案。
無論何時,在名稱空間中定義form-login時,它都會自動覆蓋通過名稱空間應用的任何其他認證過濾器。這是通過彈簧安全性中FilterChainOrder.java的過濾器鏈的順序來完成的,以瞭解如何將順序實際應用於每個過濾器。
爲了解決這個問題,從名稱空間中除去http-basic標籤,然後手動定義bean以處理基本認證,並將其順序置於AuthenticationProcessingFilter之前,因爲這是將處理表單登錄的spring安全篩選器。
BasicProcessingFilter彈簧提供了處理基本身份驗證是一個被動過濾器,這意味着如果憑據丟失,它將繼續沿着過濾器鏈,直到找到合適的過濾器來處理請求。
現在通過手動定義BasicProcessingFilter bean,我們可以設置它將出現在過濾器鏈中的順序。 下面是附加的XML聲明的一個例子,你需要在安全XML提供(春季安全< 3.X)
<bean id="basicProcessingFilter" class="org.springframework.security.ui.basicauth.BasicProcessingFilter">
<property name="authenticationManager"><ref bean="authenticationManager"/></property>
<security:custom-filter before="AUTHENTICATION_PROCESSING_FILTER"/>
<property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/></property>
</bean>
<bean id="authenticationEntryPoint"
class="org.springframework.security.ui.basicauth.BasicProcessingFilterEntryPoint">
<property name="realmName" value="My Realm Here"/>
</bean>
另外請注意,如果你的AuthenticationManager引用未找到,你可以添加別名你的名字空間就像下面的名字空間。
<security:authentication-manager alias="authenticationManager"/>
最終的結果是基本過濾器將作爲無源濾波器被應用,並且如果它的所需的憑據缺少它會繼續向下濾波器鏈和表單登錄濾波器然後將處理它。
此方法的問題是,如果憑據輸入正確,則迴應是來自表單登錄篩選器的登錄頁面。
但是,這個問題似乎會在spring安全3.1版本中被修復,並且這個工作將不再需要。
response by @grimesjm是正確的。不過,如果你使用Spring 3.X,你必須在類名適應:
<bean id="basicProcessingFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationManager">
<ref bean="authenticationManager" />
</property>
<property name="authenticationEntryPoint">
<ref bean="authenticationEntryPoint" />
</property>
</bean>
<bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName" value="Your realm here" />
</bean>
而且
<sec:http auto-config="true">
... your intercept-url here
<sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" />
<sec:form-login ... />
....
</sec:http>
我不知道是否SECURITY_CONTEXT_FILTER
之前放置過濾器是最好的選擇或不。
Spring Security 3.1現在是可能的。0
這是正確的,這裏是一個鏈接,將擴大這個答案:http://stackoverflow.com/questions/3671861/two-realms-in-same-application-with-spring-security – 2011-03-17 05:58:57
我認爲目標是REST API支持同一領域內的身份驗證。定義兩個領域就像定義兩個戰爭 - 它的工作原理,但並不理想。 – Eugen 2011-11-17 21:48:40
- 1. 春季安全 - 基本身份驗證
- 2. 春季啓動基本身份驗證
- 3. 春季基本身份驗證
- 4. Spring安全Javaconfig基本和基於表單的身份驗證
- 5. 基於不依賴表單身份驗證的基於Cookie的身份驗證
- 6. 春季開機+春季安全:如何取消基本身份驗證表格
- 7. LDAP身份驗證春季安全2.0.3
- 8. 與基本身份驗證的HTTP基本身份驗證
- 9. 基本身份驗證改造+基本身份驗證
- 10. LogiXML安全性 - 基本身份驗證
- 11. 安全HTTP基本身份驗證
- 12. Apache基本身份驗證
- 13. RESTful端點的身份驗證 - 基本身份驗證和XHR
- 14. 春季安全,無論是基本的或表單登錄身份驗證
- 15. tomcat基本身份驗證
- 16. 基於表單的身份驗證
- 17. Android - 基於表單的身份驗證
- 18. 基於表單的身份驗證
- 19. Ajax:HTTP基本身份驗證和身份驗證Cookie
- 20. CakePHP 2.0身份驗證和基本身份驗證
- 21. 基本socket.io身份驗證
- 22. 基本身份驗證
- 23. Java EE身份驗證,基本或表單AND證書身份驗證
- 24. CQ基本身份驗證
- 25. Wcf基本身份驗證
- 26. 基本HTTP身份驗證
- 27. AngularJS基本身份驗證
- 28. Ruby基本身份驗證
- 29. 基本身份驗證
- 30. 表單或基本身份驗證
他們添加了添加多個
2010-11-04 20:50:22