[英]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.