Spring Boot 实战篇(一)
SpringBoot3+Vue3 前后端知识整合
后台:
- Validation 数据校验
- Mybatis 数据库操作
- Redis 缓存
- Junit 单元测试
- 项目部署
- …
前端:
- Vite Vue项目脚手架
- Router 路由
- Pina 状态管理
- Element-Plus UI组件
开发模式:前后端分离
开发模式
开发标准:接口文档
标准:接口文档
环境搭建
- 准备数据库表(MySQL)
- 创建springboot工程,引入对应依赖(web、mybatis、mysql驱动)
- 配置文件application.yml中引入mybatis的配置信息
- 创建包结构并准备实体类
搭建
用户模块相关接口
- 注册
- 登录
- 获取用户详细信息
- 更新用户基本信息
- 更新用户头像
- 更新用户密码
实体类:根据字段生成 setter, getter, toString 方法。
使用工具lombok:在编译阶段,为实体类自动生成 setter, getter, toString 方法。在pom.xml文件中引入依赖,在实体类添加注解@Data
。
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
开发流程:
开发流程
注册
注册
Result类定义统一的响应结果。
参数校验:接口文档中对请求参数的格式要求进行校验。
if (username != null && username.length() >= 5 && username.length() <= 16 &&
password != null && password.length() >= 5 && password.length() <= 16) {
//查询用户
User u = userService.findByUserName(username);
if (u == null) {
//没有占用
//注册
userService.register(username, password);
return Result.success();
}else {
//占用
return Result.error("用户名已被占用");
}
} else {
return Result.error("参数不合法");
}
Spring Validation
:Spring提供的一个参数校验框架,使用预定义的注解完成参数校验。
- 引入Spring Validation 起步依赖
- 在校验参数前面添加@Pattern(还有其他注解可用)注解指定校验规则
- 在Controller类上添加@Validated注解
- 全局异常处理器,来处理参数校验失败的异常
在 Spring Boot 中,可以直接在方法参数上使用 @NotNull
注解来确保传入的参数不为 null
。不过,为了使 @NotNull
注解生效,需要在方法所在的类上添加 @Validated
注解。
登录
登录
登录认证:在未登录的情况下,不可以访问到其他资源。
令牌就是一段字符串:
- 承载业务数据,减少后续请求查询数据库的次数;
- 防篡改,保证信息的合法性和有效性;
定义了一种简洁的、自包含的格式,用于通信双方以json数据格式安全的传输信息。
组成:
- 第一部分:Header(头),记录令牌类型、签名算法等。
- 第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。(Base64编码,不要存放私密数据)
- 第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload、借助于指定密钥,通过指定签名算法计算而来。
JWT Token
单元测试:JUnit / Spring Boot Test
JWT生成和验证
注意事项
- JWT校验时使用的签名秘钥,必须和生成JWT令牌时使用的秘钥是配套的;
- 如果JWT令牌解析校验时报错,则说明JWT令牌被篡改或过期失效了,令牌非法。
如果多个接口有同样的操作要完成,可以使用拦截器。
使用拦截器统一验证令牌;
登录和注册接口需要放行。
获取用户详细信息
获取用户详细信息
开启驼峰命名和下划线命名的自动转换
mybatis:
configuration:
map-underscore-to-camel-case: true
ThreadLocal:
- 提供线程局部变量
- 用来存取数据:set()/get()
- 使用ThreadLocal存储的数据,线程安全
- 用完记得调用remove方法释放
更新用户基本信息
更新用户详细信息
实体-参数校验
实体参数校验
- 实体类的成员变量上添加注解
- @NotNull: 详解 https://springdoc.cn/java-notnull-method-parameter/
- @NotEmpty
- 接口方法的实体参数上添加@Validated注解
更新用户头像
更新用户头像
URL地址-参数校验
使用@URL
注解
更新用户密码
更新用户密码
令牌主动失效机制
令牌主动失效
SpringBoot集成redis
- 导入 spring-boot-starter-data-redis 起步依赖
- 在yml配置文件中,配置redis连接信息
- 调用API(StringRedisTemplate)完成字符串的存取操作。
SpringBoot集成redis
令牌主动失效
- 登录成功后,给浏览器响应令牌的同时,把该令牌存储到redis中;
- LoginInterceptor拦截器中,需要验证浏览器携带的令牌,并同时需要获取到redis中存储的与之相同的令牌;
- 当用户修改密码成功后,删除redis中存储的旧令牌。