SpringBoot3实战篇(一)


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 注解。

登录


登录

登录认证:在未登录的情况下,不可以访问到其他资源。

令牌就是一段字符串:

  • 承载业务数据,减少后续请求查询数据库的次数;
  • 防篡改,保证信息的合法性和有效性;

JWT(JSON Web Tokens - jwt.io)

定义了一种简洁的、自包含的格式,用于通信双方以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方法释放

更新用户基本信息


更新用户详细信息

实体-参数校验


实体参数校验

更新用户头像


更新用户头像

URL地址-参数校验

使用@URL注解

更新用户密码


更新用户密码
## Redis-登录优化

令牌主动失效机制


令牌主动失效

SpringBoot集成redis

  • 导入 spring-boot-starter-data-redis 起步依赖
  • 在yml配置文件中,配置redis连接信息
  • 调用API(StringRedisTemplate)完成字符串的存取操作。

SpringBoot集成redis

令牌主动失效

  • 登录成功后,给浏览器响应令牌的同时,把该令牌存储到redis中;
  • LoginInterceptor拦截器中,需要验证浏览器携带的令牌,并同时需要获取到redis中存储的与之相同的令牌;
  • 当用户修改密码成功后,删除redis中存储的旧令牌。

文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录