第 2 章 使用数据库管理用户权限
2015-07-31 16:56
417 查看
上一章节中,我们把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Security,而实际开发中,用户信息和权限信息通常是被保存在数据库中的,为此Spring Security提供了通过数据库获得用户权限信息的方式。
为了从数据库中获取用户权限信息,我们所需要的仅仅是修改配置文件中的authentication-provider部分。
将上一章配置文件中的user-service替换为jdbc-user-service,替换内容如下所示:
将上述红色部分替换为下面黄色部分。
现在只要再为jdbc-user-service提供一个dataSource1就可以让Spring Security使用数据库中的权限信息了。在此我们使用spring创建一个演示用的dataSource实现,这个dataSource1会连接到mysql数据库,从中获取用户权限信息。[1]
最终的配置文件如下所示:
Spring Security默认情况下需要两张表,用户表和权限表。以下是hsqldb中的建表语句:
我们在示例中预先初始化了一部分数据:
上述sql中,我们创建了两个用户admin和user,其中admin拥有ROLE_ADMIN和ROLE_USER权限,而user只拥有ROLE_USER权限。这和我们上一章中的配置相同,因此本章实例的效果也和上一章完全相同,这里就不再赘述了。
实例见ch002。
2.1. 修改配置文件
为了从数据库中获取用户权限信息,我们所需要的仅仅是修改配置文件中的authentication-provider部分。将上一章配置文件中的user-service替换为jdbc-user-service,替换内容如下所示:
<authentication-provider> <user-service> <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /> <user name="user" password="user" authorities="ROLE_USER" /> </user-service> </authentication-provider>
将上述红色部分替换为下面黄色部分。
<authentication-provider> <jdbc-user-service data-source-ref="dataSource1"/> </authentication-provider>
现在只要再为jdbc-user-service提供一个dataSource1就可以让Spring Security使用数据库中的权限信息了。在此我们使用spring创建一个演示用的dataSource实现,这个dataSource1会连接到mysql数据库,从中获取用户权限信息。[1]
<beans:bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/> <beans:property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/> <beans:property name="username" value="root"/> <beans:property name="password" value="jing"/> </beans:bean>
最终的配置文件如下所示:
<?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.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">
<http auto-config='true'>
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
<authentication-manager>
<authentication-provider> <jdbc-user-service data-source-ref="dataSource1"/> </authentication-provider></authentication-manager>
<beans:bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/> <beans:property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/> <beans:property name="username" value="root"/> <beans:property name="password" value="jing"/> </beans:bean></beans:beans>
2.2. 数据库表结构
Spring Security默认情况下需要两张表,用户表和权限表。以下是hsqldb中的建表语句:create table users( username varchar(50) not null primary key, password varchar(50) not null, enabled boolean not null ); create table authorities ( username varchar(50) not null, authority varchar(50) not null, constraint fk_authorities_users foreign key(username) references users(username) ); create unique index ix_auth_username on authorities (username,authority);
我们在示例中预先初始化了一部分数据:
insert into users(username,password,enabled) values('admin','admin',1); insert into users(username,password,enabled) values('user','user',1); insert into authorities(username,authority) values('admin','ROLE_ADMIN'); insert into authorities(username,authority) values('admin','ROLE_USER'); insert into authorities(username,authority) values('user','ROLE_USER');
上述sql中,我们创建了两个用户admin和user,其中admin拥有ROLE_ADMIN和ROLE_USER权限,而user只拥有ROLE_USER权限。这和我们上一章中的配置相同,因此本章实例的效果也和上一章完全相同,这里就不再赘述了。
实例见ch002。
相关文章推荐
- Oracle修改字段长度以及计算天数
- 第 3 章 自定义数据库表结构
- java操作oracle时间类型Date
- Redis——五种数据类型
- oracle分页的实现
- MySQL 错误1418 的原因分析及解决方法
- mysql aaa.123abc.com要换成aaa.123.net
- ODAC访问oracle时,提示:由于以前的函数求值超时,函数求值被禁用,必须继续执行才能正常返回
- CI框架 数据库批量插入 insert_batch()
- 数据库相关(5) SQLite
- mysql查询语句in和exists二者的区别和性能影响
- Redis——简介
- PHP-redis中文文档
- redis安装部署
- MySQL规范
- 批量删除Redis数据库中的Key
- memcache的启动
- sqlserver中的序列
- mongodb 命令相关
- SQL Server中的“最大并行度”的配置建议