2013-01-23 43 views
2

有誰知道在Spring中實現一個用戶服務或身份驗證提供程序的方式,將接受任何用戶登錄時?春天登錄的任何細節

這進一步爲我剛纔的問題:spring-ws get username & password

我在春天-WS項目基本安全設置:

<security:http auto-config="true"> 
    <security:intercept-url pattern="/**" access="ROLE_USER" /> 
    <security:intercept-url pattern="/*.wsdl" access="ROLE_USER" /> 
    <security:http-basic/> 
</security:http> 

<security:authentication-manager erase-credentials="false"> 
    <security:authentication-provider user-service-ref="userService"> 
     <security:user-service> 
      <security:user name="me" password="mypass" 
       authorities="ROLE_USER" /> 
     </security:user-service> 
    </security:authentication-provider> 
</security:authentication-manager> 

我不希望在用戶服務指定用戶,我希望具有任何詳細信息的用戶有權訪問,我只是想確保用戶提供用戶名和密碼,並確保我可以從SecurityContextHolder訪問此信息。

是否有必要實現我自己的用戶服務或認證提供程序來做到這一點,如果有的話,是否有人可以指向示例的方向或提供給我一個?

謝謝!

回答

1

您需要提供您自己的AuthenticationProvider,即org.springframework.security.authentication.AuthenticationProvider接口的實現。

<security:authentication-manager alias="authenticationManager"> 
    <security:authentication-provider ref="myProvider" /> 
</security:authentication-manager> 

<bean id="myProvider" class="MyProvider"/> 

MyProvider然後可以委託給自定義UserDetailsService設置authorieties(角色)或直接設置ROLE_USER。如果你改變

<security:http auto-config="true"> 

<security:http auto-config="true" use-expressions="true"> 

然後你可以從

<security:intercept-url pattern="/**" access="ROLE_USER" /> 
<security:intercept-url pattern="/*.wsdl" access="ROLE_USER" /> 

設置您攔截到

<security:intercept-url pattern="/**" access="isAuthenticated()" /> 
<security:intercept-url pattern="/*.wsdl" access="isAuthenticated()" /> 
+0

謝謝,這似乎工作實現我自己的AuthenticationProvider – mpc

0

這將允許任何經過身份驗證的用戶訪問這些url模式。

+0

這只是故事的一半,因爲你仍然需要一個自定義的'AuthenticationProvider'虛假身份驗證(接受任何用戶/密碼組合)。 –

0

你需要做到以下幾點:

配置攔截的URL提供給任何角色名稱的訪問。您可以通過執行以下操作做到這一點:

<security:http auto-config="true"> 
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_REMEMBERED" /> 
    <security:intercept-url pattern="/*.wsdl" access="IS_AUTHENTICATED_REMEMBERED" /> 
    <security:http-basic/> 
</security:http> 

創建,授予至少一個權限給用戶任何的用戶名和密碼組合自己的用戶服務。 配置彈簧安全性以使用您創建的服務。

<bean id="userService" class="com.ek.UserService" /> 
<authentication-manager alias="authenticationManager"> 
    <authentication-provider user-service-ref="userService" /> 
</authentication-manager> 

我希望這能讓你明白你需要做什麼。否則,我們可以爲您創建示例代碼。

+0

這只是故事的一半,因爲您仍然需要自定義'AuthenticationProvider'來僞造身份驗證(接受任何用戶/密碼組合)。 –