2014-06-27 103 views
1

我試圖使用Spring Security設置預認證授權,類似於外部系統執行身份驗證並將登錄信息保存在cookie中的站點管理器。但是爲了實現這一點,我需要重定向到外部URL。Spring Security使用Java配置自定義篩選器註冊

我試着從AbstractPreAuthenticatedProcessingFilter的實現中做到這一點,但這不起作用,因爲HttpServletResponse對象不可用。

更合適的方法似乎是添加一個自定義篩選器,檢查cookie並執行重定向,一旦Cookie可用,然後將控件傳遞給Spring Security篩選器。如何在基於Java配置的Spring Security應用程序中註冊此自定義過濾器?任何幫助,將不勝感激。

回答

0

常用的方法是使用AuthenticationEntryPoint將用戶重定向到外部認證接口,例如LoginUrlAuthenticationEntryPoint。 Spring Security在它確定用戶需要進行身份驗證時會自動調用入口點。

一旦用戶返回到您的應用程序,它應該打它擴展了AbstractPreAuthenticatedProcessingFilter,並從您的Cookie /頭/令牌(後也許有些有效性和完整性檢查)的方法getPreAuthenticatedPrincipal提取用戶名自定義過濾器。

Spring配置可能類似於:

<security:http entry-point-ref="externalAuthentication"> 
    <security:custom-filter after="BASIC_AUTH_FILTER" ref="cookieAuthentication"/> 
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/> 
</security:http> 

<bean id="externalAuthentication" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
    <constructor-arg value="http://server.local/authenticationService"/> 
</bean> 

<bean id="cookieAuthentication" class="custom class extending org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter"> 
    ... 
</bean> 
相關問題