我在Spring/Java EE web應用程序中設置了基本的spring security。我可以限制訪問某些頁面並強制登錄(與角色等)。需要有一個表格,新用戶可以註冊並指定登錄名和密碼。在Spring Security中添加新用戶
我想知道如果要創建新用戶,我只是簡單地查詢和更新適當的彈簧安全表(例如使用hibernate),就像我爲任何查詢所做的那樣,或者是否有內置的創建新用戶的功能?如果我只是使用標準的DAO來更新用戶,我應該如何處理密碼的哈希?
謝謝!
我在Spring/Java EE web應用程序中設置了基本的spring security。我可以限制訪問某些頁面並強制登錄(與角色等)。需要有一個表格,新用戶可以註冊並指定登錄名和密碼。在Spring Security中添加新用戶
我想知道如果要創建新用戶,我只是簡單地查詢和更新適當的彈簧安全表(例如使用hibernate),就像我爲任何查詢所做的那樣,或者是否有內置的創建新用戶的功能?如果我只是使用標準的DAO來更新用戶,我應該如何處理密碼的哈希?
謝謝!
在春季安全中沒有用於創建用戶的內置功能。它僅用於根據試圖登錄和訪問資源的用戶的規則來保護資源。
要使用散列算法您可以將<password-encoder>添加到<authentication-provider>。
這將如何影響添加新用戶流程?大概會有一個表單,用戶輸入用戶名和密碼等,然後將其插入數據庫。所以我不確定如何使用
<密碼編碼器>僅用於授權過程。它將幫助您將用戶鍵入的密碼與數據庫中的密碼進行比較。 但數據庫中的密碼您必須手動哈希。 – 2010-02-08 21:25:27
-1無關的答案 – 2010-02-08 21:40:04
Spring Security有JdbcUserDetailsManager
。它是基於JDBC的默認UserDetailsService
的子類,具有創建用戶等的其他方法。您可以將它用作DAO而不是您自己的。
但密碼散列應該明確處理。例如,如果您使用SHA散列,則可以使用。
你必須結合本頁面上的所有答案。
下面是一個例子使用JDBC配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">
<global-method-security secured-annotations="enabled"/>
<http auto-config="true" access-denied-page="/accessDenied.jsp">
<!-- login page has anonymous access -->
<intercept-url pattern="/login.jsp*" filters="none"/>
<!-- all pages are authenticated -->
<intercept-url pattern="/**.action" access="ROLE_USER, ROLE_ADMIN" />
<!-- all admin contextual pages are authenticated by admin role -->
<intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
<form-login authentication-failure-url="/login.jsp?login_error=1" default-target-url="/index.action" login-page="/login.jsp"/>
<logout logout-success-url="/index.action"/>
</http>
<authentication-provider>
<password-encoder hash="md5" />
<jdbc-user-service data-source-ref="dataSource"
authorities-by-username-query="SELECT username, role AS authority FROM sweet_users WHERE username = ?"
users-by-username-query="SELECT username, password, 1 AS enabled FROM sweet_users WHERE username = ?" />
</authentication-provider>
</beans:beans>
這是使用自定義查詢來獲取用戶。 Spring Security需要分別使用用戶名,密碼和權限列名稱的用戶表,因此,您需要做的是返回這些用戶表。您需要提供數據源。
如果您創建了一個用於在admin/context下添加用戶的頁面,它將根據此配置進行身份驗證。
添加豆你的UserDAO和/或UserService和/或的AuthenticationService並將它傳遞給你的用戶控制器...
感謝 - 所以基本上,正確的方法是使用只更新適當的彈簧安全表我的DAO? – james 2010-02-08 21:14:55
是的。您應該有單獨的控制器/流程來處理註冊 – 2010-02-08 21:40:38