这部分比前面几节稍微要复杂点,首先看看官方文档对于数据库是怎么定义的
Security Database Schema
因为我们只涉及到用户登录,为了简单,所以我们只看第一小节
The standard JDBC implementation of the UserDetailsService
(JdbcDaoImpl
) requires tables to load the password, account status (enabled or disabled) and a list of authorities (roles) for the user. You will need to adjust this schema to match the database dialect you are using.
create table users( username varchar_ignorecase(50) not null primary key, password varchar_ignorecase(50) not null, enabled boolean not null ); create table authorities ( username varchar_ignorecase(50) not null, authority varchar_ignorecase(50) not null, constraint fk_authorities_users foreign key(username) references users(username) ); create unique index ix_auth_username on authorities (username,authority);这里建了三个表,分别是用户表,权限表和索引表,需要注意的是,这里数据库默认的是HSQLDB database数据库,所以,对于MySql来说,其对应的建表的语句有所不同,实际中建表的SQL语句代码如下所示:
//新建并使用数据库 <pre id="recommend-content-1459970031" class="recommend-text mb-10">CREATE DATABASE SPRINGSECURITY; USE SPRINGSECURITY;
//创建用户表
create table users ( username varchar(50) not null primary key, /*用户名*/ password varchar(50) not null, /*密码*/ enabled char not null /*是否禁用*/ );/*权限表*/
create table authorities ( username varchar(50) not null, authority varchar(50) not null, );//创建索引
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 VALUES('admin','ROLE_ADMIN'); INSERT INTO authorities VALUES('user','ROLE_USER');这里分别赋予admin用户ROLE_ADMIN权限,user用户ROLE_USER权限,注意这里authority必须要是ROLE_开头的
插入数据以后,接下来对配置文件进行更改
首先根据自己数据库类型,配置数据库的驱动,mysql如下配置
<!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/SPRINGSECURITY"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean>接下来配置认证的管理器authentication-manager
<security:authentication-manager> <security:authentication-provider> <security:jdbc-user-service data-source-ref="dataSource" /> </security:authentication-provider> </security:authentication-manager>设置好data-source-ref为数据源里面的id后基本配置完毕
最后我们如何判断是否起作用了呢?
就是除了用户登录控制以外,还有用户权限控制,配置文件添加如下代码
<security:http auto-config="true"> <!-- 指定登录页面 --> <security:form-login login-page="/IdeJsp/login.jsp"/> <security:intercept-url pattern="/IdeJsp/index.jsp" access="ROLE_ADMIN" /> </security:session-management> </security:http>上面的配置功能实现了对index.jsp这个页面的权限控制,只允许ROLE_ADMIN用户进行访问
此外还需要设置
<!-- security3.1以后版版本设置首页不被拦截方法如下--> <security:http pattern="/IdeJsp/login.jsp" security="none" />设置为login.jsp不进行拦截
打开首页后,登录用户admin即可进入index,登录user则会跳到错误页面