我已經實現映射到特定URL的自定義安全機制「/合作伙伴/登錄」,我用我自己的子類AbstractAuthenticationProcessingFilter產生一個subclassed AbstractAuthenticationToken由AuthenticationProvider的實現進行身份驗證。在成功時,我會撥打SimpleUrlAuthenticationSuccessHandler,它將嘗試重定向到「/ UserProfile」。 此「/ partner/login」處理來自我們的某個合作伙伴的SSO請求。而在開發過程中,我們的內部登錄過程使用Spring Security的默認登錄形式進行模擬,這就是爲什麼auto-config是真實的。春季安全SecurityContextHolder.getContext()。getAuthentication()返回null
起初,我用的是folllowing(春季安全)配置的發展:
<http auto-config="true">
<intercept-url pattern="/**/*.jsp" access="ROLE_USER, ROLE_PARTNER_USER"/>
<custom-filter after = "FORM_LOGIN_FILTER" ref = "partnerSsoAuthFilter"/>
</http>
現在這工作正常,我也得到通過SecurityContextHolder Authentication對象,我rediirected後的「/UserProfile「
一旦我在使用自定義過濾器鏈圖的生產(彈簧安全性)配置中使用這些問題,問題就會出現。 (我們使用CAS在生產我們自己的登錄)
<bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
<sec:filter-chain-map path-type="ant">
<sec:filter-chain pattern="/partner/login" filters="sif,partnerSsoAuthFilter,etfPartner,fsi" />
<sec:filter-chain pattern="/" filters="casValidationFilter, wrappingFilter" />**
<sec:filter-chain pattern="/secure/receptor" filters="casValidationFilter" />
<sec:filter-chain pattern="/j_spring_security_logout" filters="logoutFilter,etf,fsi" />
***More filters***
</sec:filter-chain-map>
</bean>
這裏SIF,ETF,FSI是正規SecurityContextPersistenceFilter,和的ExceptionTranslationFilter FilterSecurityInterceptor。
使用此配置時,重定向到「/ UserDetails」SecurityContextHolder.getContext()。getAuthentication()返回null,但我仍然可以訪問放置在會話中的認證對象。
我對這種行爲感到困惑。在這兩種情況下,我都使用相同的自定義過濾器/提供程序/令牌等來實現「/ partner/login」。 爲什麼在一種情況下getAuthentication()不爲空,而在另一箇中它是空的? 任何幫助將是偉大的。 TIA。
您使用的是哪個版本的Spring Security? –
Spring Security版本是3.1.1 –
您是否曾經解決過這個問題?請分享你的解決方案.. – aProgrammer