[英]Adding users to spring 3 security
我正在考慮通過spring 3安全性實現用戶的授權。 我知道用戶名和密碼存儲在某個XML文件中,如下所示:
<authentication-manager>
<authentication-provider>
<user-service>
<user name="username" password="123456" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
但我想知道,如何添加用戶或更改密碼? 有人能告訴我嗎?
user-service
元素創建一個InMemoryUserDetailsManager
,它具有修改用戶和更改密碼的方法。
但是,在XML中定義用戶實際上僅用於測試。 如果您希望能夠添加和更新用戶信息,則應使用數據庫。 參考手冊中介紹了標准的Spring Security數據庫模式。
然后,您可以使用JDBC UserDetailsManager
實現 ,也可以構建自己的自定義數據管理代碼。
同意盧克。 在XML中存儲用戶名和密碼不是一個好習慣。 將用戶詳細信息存儲在數據庫中,以便添加修改它們。
創建數據庫
CREATE TABLE IF NOT EXISTS users (
username VARCHAR(10) NOT NULL,
password VARCHAR(32) NOT NULL,
enabled BOOLEAN NOT NULL,
PRIMARY KEY (username)
);
CREATE TABLE IF NOT EXISTS authorities (
username VARCHAR(10) NOT NULL,
authority VARCHAR(10) NOT NULL,
FOREIGN KEY (username) REFERENCES users(username)
);
insert into users(username,password,enabled) values ('abc','123456',TRUE);
insert into authorities(username,AUTHORITY) values ('abc', 'ROLE_USER');
這里的表名,根據Spring Security默認查詢使用列名('選擇用戶名,密碼,從用戶名=?'的用戶啟用)。 因為當我們使用默認名稱時,我們不需要顯式指定查詢來獲取用戶詳細信息。 查看Spring Security文檔以獲取更多詳細信息。
數據源
您需要具有如下定義的數據源bean,因為Spring安全性需要連接數據庫以獲取用戶詳細信息,因此您需要告訴它哪個驅動程序,數據庫URL,用戶名和密碼。 例如如下。
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver" />
<property name="url" value="jdbc:hsqldb:hsql://localhost/elab" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
Spring安全配置
現在我們需要告訴用戶數據庫的spring安全性以獲取登錄詳細信息。 因此,我們使用'jdbc-user-service'而不是內存UserDetailsService 的用戶服務 。 現在我們的身份驗證管理器將如下所示。
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>
請注意,如果用戶表結構與Spring在默認情況下的預期不同,則應將查詢顯式指定為jdbc-user-service元素的屬性(users-by-username-query)。 有關更多信息,請參閱文檔。
現在所有set和Spring都會很樂意從數據庫中獲取用戶詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.