前言
本例环境:
SpringBoot:2.3.0.RELEASE
SpringSecurity:5.3.2.RELEASE
Mybatis:2.1.3
Mysql:5.6
开发工具:IDEA
源码下载网盘链接:https://pan.baidu.com/s/1glGSKDJCSsFL7iGr6CJ-pg 提取码:elig
一、创建数据库和表结构数据
创建名为“spring-security”字符集为“utf-8”的数据库,整个数据库的表结构如下:
注意:角色名必须以 “ROLE_” 开头。
二、创建SpringBoot项目
pom.xml文件中添加依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
application.properties添加配置信息:
server.port=9090
server.tomcat.uri-encoding=UTF-8
spring.application.name=spring-security-mybatis
#连接MySQL数据库路径(设置utf-8字符集,解决中文乱码问题;设置中国时区,解决前后台时间不一致问题)
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/spring-security?useUnicode=true&characterEncoding=utf8&serverTimezone=CTT
#连接MySQL用户名
spring.datasource.username=admin
#连接MySQL密码
spring.datasource.password=admin123
#mysql驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mybatis映射的sql文件
mybatis.mapper-locations=classpath:mapper/*.xml
#开启sql日志显示
logging.level.com.hyk.springsecuritymybatis.dao=debug
三、创建实体类
角色类 Role.java
package com.hyk.springsecuritymybatis.entity;
import java.io.Serializable;
public class Role implements Serializable {
private Integer id;
private String name;
private String nameZh;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNameZh() {
return nameZh;
}
public void setNameZh(String nameZh) {
this.nameZh = nameZh;
}
}
菜单类 Menu.java
package com.hyk.springsecuritymybatis.entity;
import java.io.Serializable;
import java.util.List;
public class Menu implements Serializable {
private Integer id;
private String pattern;
private List<Role> roles;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPattern() {
return pattern;
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
}
用户类 User.java
package com.hyk.springsecuritymybatis.entity;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* 用户实体类,需实现 security 的 UserDetails 接口
*/
public class User implements Serializable, UserDetails {
private Integer id;
private String username;
private String password;
private Boolean enabled;
private Boolean locked;
private List<Role> roles;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
/**
* 获取当前用户对象的用户名
*/
public String getUsername() {
return username;
}
/**
* 当前账户是否未过期
*/
@Override
public boolean isAccountNonExpired() {
return true;
}
/**
* 当前账户密码是否未过期
*/
@Override
public boolean isCredentialsNonExpired() {
return true;
}
/**
* 当前账户是