Spring Security + JWT + Swagger2 登录验证一套流程
主要是三个框架的集成配置,以及各个独立的配置(主要是 JWT + Security 的登录验证)。
流程:
- 构建 Spring Boot 基本项目,准备数据库表 User —— 用于存放登录实体类信息。
- 配置 Security 和 Swagger2 环境,确保没有什么问题。
- 构建
RespBean——公共返回实体类
,JwtTokenUtil——JWT token 工具类
,User——登录实体类
- 让 User 实现
UserDetails
接口,重写部分方法。 - 配置 Security 实现重写
UserDetailsService
方法,以及PasswordEncoder——密码凭证器
并加上@Bean
注解。这两个主要用于设置 Security 的认证。 - 构建
jwtAuthenticationTokenFilter
类——自定义 JWT Token 拦截器,并在SecurityConfig
的授权方法中添加此拦截器。 - 在
Swagger2Config
配置类中,配置有关 Security 的 Token 认证。 - 启动项目查看代码是否准确。
1. 构建 Spring Boot 基本项目,准备数据库——User
项目子模块:authority-security
,父模块已引入 Spring boot 依赖 2.3.0
1.1 导入依赖
<dependencies>
<!-- web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok 依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- mysql 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybatis-plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<!-- swagger2 依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- swagger 第三方 UI 依赖 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<!-- spring security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- JWT 依赖 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!-- commons-pool2 对象池依赖 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
</dependencies>
复制代码
构建数据库表:user
create table user(
id int primary key auto_increment,
username varchar not null,
password varchar not null,
info varchar(200),
enabled tinyint(1) default 1
)
insert into user values(default,"admin","$2a$10$Himwt.wu3MPOLnNQ9YUH8O2quxgi7bMuomiNeFsVKRay87.qG5dgy","管理员 info ...",default)
复制代码
username:admin;password:123
配置 application.yml
文件参数:
server:
port: 8082
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/dbtest16?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: admin
password: admin
hikari:
# 连接池名字
pool-name: DateHikari
# 最小空闲连接数
minimum-idle: 5
# 空闲连接存活最大事件,默认10分钟(600000)
idle-timeout: 180000
# 最大连接数:默认 10
maximum-pool-size: 10
# 从连接池返回的连接自动提交
auto-commit: true
# 连接最大存活时间,0 表示永久存活,默认 1800000(30 min)
max-lifetime: 1800000
# 连接超时事件 30 s
connection-timeout: 30000
# 测试连接是否可用的查询语句
connection-test-query: SELECT 1
# MP 配置
mybatis-plus:
# 配置 Mapper 映射文件
mapper-locations: classpath*:/mapper/*Mapper.xml
# 实体类的别名包
type-aliases-package: com.cnda.pojo
configuration:
# 自动驼峰命名
map-underscore-to-camel-case: false
# MyBati