基于 Spring Security 的最小项目模板
一、简介
本文应该是目前为止最新、最简洁的实现 Spring Security 认证授权功能的最小项目(附源代码)。言归正传,一个实际项目的后台至少包含以下两个基本功能:
1、连接数据库
2、用户注册、登陆、认证和授权功能
特别是用户的认证和授权,因为使用了 Spring Boot 框架,所以建议使用 Spring Security 来实现,但是网络上关于 Spring Security 的教程水平参差不齐,很多教程把一个简单的问题复杂化,我刚开始看也是一头雾水,越看越怀疑自己,越看越想放弃,当我花了不少时间从各个渠道学习、对比和研究后发现:其实 Spring Security 并不复杂,而且还很简单。
下面我们就来看看搭建包含以上两个基本功能的最小项目的流程。
源码位置: https://github.com/hujhcv/Spring-Security-Template-Project
二、项目技术栈
本文使用到了以下的技术栈:
Spring Boot、Spring Security、PostgreSQL、MyBatis-Plus、jjwt、Lombok、IntelliJ IDEA、Apifox。
如果你是新手请无脑使用以上技术,因为以上技术我都是花了不少时间和其竞品对比后才选定的。下面简要说一下选这些技术的原因:
数据库,我对比了 PostgreSQL 和 MySQL,PostgreSQL 是完全开源的,而且这几年发展势头迅猛,很多大厂都切换到了 PostgreSQL;
数据库操作框架,MyBatis-Plus 与 Spring Data JPA 的对比,虽然 Spring Data JPA 开发效率很高,但是 MyBatis-Plus 的性能更好,而且可以很方便实现自定义的数据库操作,同时他还是国产框架,国内使用的人非常多;
JWT操作库,我对比了 jjwt 和 hutool-jwt,jjwt 可以按需引入,包会更小,而且操作jwt的方式更加符合jwt的原理;
IDE 的比较,新手请无脑选择 IntelliJ IDEA,它对Spring Boot 项目的创建非常友好。
接口测试软件,我们比较了 postman 和 Apifox,postman在我电脑上一直启动不了,直接放弃,支持国产 Apifox.
三、项目环境
请先安装好以下软件和环境
Java 17:目前我们使用的 Spring Boot 稳定版是 3.5.6, 支持的最小Java 版本是17,请不要使用更旧的版本;
IntelliJ IDEA 软件;
PostgreSQL 数据库;
Apifox 接口测试软件
四、创建数据库
打开 pgAdmin 4 软件(安装 PostgreSQL 数据库时会一起安装),右键 Databases 新建一个数据库,比如名字叫做 “health_manager” ,如下图所示:
五、创建项目
5.1、新建项目
打开 IntelliJ IDEA 软件,新建 Spring Boot 项目,假设我们的项目名称为 HealthManager,其它参考红框位置的设置,如下图所示:
5.2、添加依赖项
打开项目的 pom.xml 文件,添加 MyBatis-Plus 和 jjwt 依赖,如下图所示:
添加完成后 pom.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.liimou</groupId><artifactId>HealthManager</artifactId><version>0.0.1-SNAPSHOT</version><name>HealthManager</name><description>HealthManager</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><jjwt.version>0.13.0</jjwt.version><mybatis-plus.version>3.5.14</mybatis-plus.version></properties><dependencies><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.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope></dependen