2013-08-04 51 views
0

是否有必要在單個Web應用程序中實現UserDetailsS​​ervice實現? 更確切地說,我的要求是我有一個Servlet,它偵聽需要針對一種類型的用戶進行身份驗證的HTTP POST請求(可以說UserType 1),Http POST請求包含一些我可以用於身份驗證的字段(用戶ID和一些哈希字符串)。在成功認證後,用戶再次轉發到另一個登錄頁面,在此頁面中再次進行身份驗證,此時用戶類型爲UserType 2. 此處,兩個單獨的UserDetailsS​​ervice實現

UserType 1和UserType 2具有兩個獨立的主體和憑證。 我需要Http POST請求參數流到UserType 2的會話(即會話2)。

第2階段應該存活直到第1階段被銷燬。

我也猜我還需要兩個身份驗證入口點?

我的直覺是,這是不可能的(我希望我錯了)!

關於此問題的任何澄清或想法?

回答

3

我不確定Spring Security如何實現嵌套身份驗證。但是你可以有兩個獨立的UserDetailsService實現。考慮如果您有兩種類型的網址/**/admin/**,並且它們可以由兩個單獨的用戶組使用。使用Spring Security 3.1開始,您可以使用多個HTTP標籤(see corresponding documentation):

<http pattern="/admin/**" authentication-manager-ref="adminAuthenticationManager"> 
    <intercept-url pattern="/**" access="ROLE_ADMIN" /> 
    ... 
</http> 

<authentication-manager id="adminAuthenticationManager" > 
    <authentication-provider user-service-ref="adminUserDetailsService"/> 
</authentication-manager> 

<bean id="adminUserDetailsService" class="com.mucompany.security.AdminUserDetailsService"/> 

<!-- No pattern, so everything will be matched --> 
<http authentication-manager-ref="adminAuthenticationManager"> 
    <intercept-url pattern="/**" access="ROLE_USER" /> 
    ... 
</http> 

<authentication-manager id="userAuthenticationManager" > 
    <authentication-provider user-service-ref="publicUserDetailsService"/> 
</authentication-manager> 

<bean id="publicUserDetailsService" class="com.mucompany.security.PublicUserDetailsService"/> 

您甚至可以使用entry-point-ref屬性的每個HTTP標籤聲明不同的切入點。

相關問題