赞
踩
此文章基于Spring Security 6.0
因为是使用了数据库进行身份认证,那么数据肯定是放在数据库里的我知道这是句废话,但这句废话不得不讲,别问,问就是带不动。这时候需要将数据库驱动的依赖引入到项目中来。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
配置数据库连接
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/spring-security-demo
driver-class-name: com.mysql.cj.jdbc.Driver
这个东西配置完了以后呢,就能获得dataSource这个bean了
默认的数据库表创建文件在org/springframework/security/core/userdetails/jdbc/users.ddl
首先在这里使用MySQL进行演示
create table users(
username varchar(50) not null primary key,
password varchar(500) 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);
下面是Oracle数据库表的创建方法
CREATE TABLE USERS (
USERNAME NVARCHAR2(128) PRIMARY KEY,
PASSWORD NVARCHAR2(128) NOT NULL,
ENABLED CHAR(1) CHECK (ENABLED IN ('Y','N') ) NOT NULL
);
CREATE TABLE AUTHORITIES (
USERNAME NVARCHAR2(128) NOT NULL,
AUTHORITY NVARCHAR2(128) NOT NULL
);
ALTER TABLE AUTHORITIES ADD CONSTRAINT AUTHORITIES_UNIQUE UNIQUE (USERNAME, AUTHORITY);
ALTER TABLE AUTHORITIES ADD CONSTRAINT AUTHORITIES_FK1 FOREIGN KEY (USERNAME) REFERENCES USERS (USERNAME) ENABLE;
在之前的基于内存的用户认证篇章中讲过UserDetailsService及UserDetailsManager了,这里就不多讲了,JdbcUserDetailsManager跟InMemoryUserDetailsManager一样都是实现了UserDetailsManager接口的类,该怎么增删查改就怎么增删查改,只不过最终体现到了数据库罢了
@Configuration @EnableWebSecurity public class WebSecurityConfig { @Autowired private DataSource dataSource; @Bean public UserDetailsService userDetailsService(){ UserDetails user = User.builder() .username("user") .password("{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW") .roles("USER") .build(); UserDetails admin = User.builder() .username("admin") .password("{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW") .roles("USER", "ADMIN") .build(); JdbcUserDetailsManager users = new JdbcUserDetailsManager(dataSource); users.createUser(user); users.createUser(admin); return users; } }
在初始化项目的时候插入两条用户数据
启动完后,查看数据库
这是users表
这是authorities表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。