跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava

Spring Boot 实战:分组校验、Redis 登录与多环境配置

综述由AI生成Spring Boot 实战涵盖数据校验、安全认证及部署配置。通过 Hibernate Validator 实现分组校验,区分创建与更新场景;利用自定义注解扩展校验逻辑。集成 Redis 管理登录令牌,支持主动失效机制保障安全性。掌握 PageHelper 分页插件使用。了解 Spring Boot 属性配置的优先级顺序及多环境 Profile 切换方案,包括单文件分隔与多文件独立配置模式。最后简述 JAR 包部署流程及运行命令。

深海蔚蓝发布于 2026/3/21更新于 2026/4/273 浏览
Spring Boot 实战:分组校验、Redis 登录与多环境配置

分组校验

在 Spring Boot 中,我们可以使用 Hibernate Validator 进行分组校验。这允许针对不同业务场景(如创建或更新)应用不同的规则。

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

定义分组

public interface CreateGroup { }
public interface UpdateGroup { }

定义校验项时指定归属的分组

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

public class User {
    @NotBlank(message = "姓名不能为空", groups = {UpdateGroup.class})
    private String name;

    @NotBlank(message = "用户名不能为空", groups = {CreateGroup.class, UpdateGroup.class})
    @Size(min = 5, max = 20, message = "用户名长度必须在 5-20 个字符之间", groups = {CreateGroup.class, UpdateGroup.class})
    private String username;
    // getter 和 setter 方法省略...
}

校验时指定要校验的分组

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;

@RestController
public class UserController {
    @PostMapping("/create")
    public String createUser(@Validated({CreateGroup.class}) @RequestBody User user) {
        // 保存用户信息的逻辑...
        return "创建成功";
    }

    @PostMapping("/update")
    public String updateUser(@Validated({UpdateGroup.class}) @RequestBody User user) {
        // 更新用户信息的逻辑...
        return "更新成功";
    }
}

若未显式指定分组,则默认归属 Default 组,且分组支持继承关系。

分组示意图

自定义注解

已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验。在 Spring Boot 中,自定义注解是一种强大的机制,允许开发者创建具有特殊含义的标记,用于修饰代码元素并给它们附加元数据。

要创建一个自定义注解,需要使用 Java 提供的元注解来定义注解的自身属性和行为。其中最常用的包括 @Target、@Retention、@Documented 和 @Inherited 等。通过这些元注解,可以指定自定义注解的应用目标(如方法、类或字段)、保留策略(如源代码、编译期或运行期)以及是否可被继承和文档化。

自定义注解示例

校验器实现

分页查询

引入 PageHelper 插件可以快速实现分页功能。

<!-- PageHelper -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.13</version>
</dependency>

登入验证(集成 Redis)

令牌主动失效机制

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

SpringBoot 集成 Redis

导入 spring-boot-starter-data-redis 起步依赖

Maven 依赖

在 yml 配置文件中,配置 Redis 连接信息

YML 配置

调用 API(StringRedisTemplate) 完成字符串的存取操作

SpringBoot 项目部署

引入 Maven 插件(在 build 标签中)。

Maven 插件配置

注意:JAR 包部署,要求服务器必须有 JRE 环境。

JRE 环境检查

然后在生成 JAR 包的目录下,打开 CMD 窗口,运行:

java -jar jar 包位置

属性配置方式

项目配置文件方式

这种运维人员没法修改的。

配置文件位置

application.yml

命令行参数方式

命令行参数

例如:

参数示例

环境变量方式

环境变量

外部配置文件方式

外部配置

优先级说明

配置文件优先级

优先级依次增强:

  • 项目中 resources 目录下的 application.yml
  • JAR 包所在目录下的 application.yml
  • 操作系统环境变量
  • 命令行参数

多环境开发 - Profiles

单文件配置

  • --- 分隔不同环境的配置
  • spring.config.activate.on-profile 配置所属的环境
  • spring.profiles.active 激活环境

多文件配置

  • 通过多个文件分别配置不同环境的属性
  • 文件的名字为 application-环境名称.yml
  • 在 application.yml 中激活环境

Profile 配置

目录

  1. 分组校验
  2. 引入依赖
  3. 定义分组
  4. 定义校验项时指定归属的分组
  5. 校验时指定要校验的分组
  6. 自定义注解
  7. 分页查询
  8. 登入验证(集成 Redis)
  9. 令牌主动失效机制
  10. SpringBoot 集成 Redis
  11. 导入 spring-boot-starter-data-redis 起步依赖
  12. 在 yml 配置文件中,配置 Redis 连接信息
  13. 调用 API(StringRedisTemplate) 完成字符串的存取操作
  14. SpringBoot 项目部署
  15. 属性配置方式
  16. 项目配置文件方式
  17. 命令行参数方式
  18. 环境变量方式
  19. 外部配置文件方式
  20. 配置文件优先级
  21. 多环境开发 - Profiles
  22. 单文件配置
  23. 多文件配置
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 JSP 的游戏销售网站设计与实现
  • Spring Boot Web 毕业设计项目:智驿 AI 系统前后端实现
  • Ladybird 独立浏览器架构与 Web 引擎技术介绍
  • 2025 年技术博客创作总结:AI 与 WebGIS 探索
  • Harness 决定 AI Agent 生产力:核心架构与设计实践
  • Git 国内镜像使用教程
  • AI 时代三大核心概念深度对比:MCP、Agent、Skills
  • Vivado Aurora 8B/10B IP 核配置指南
  • 基于 LangGraph 的多智能体智能写作系统实现
  • C++ 数据结构:哈希表原理与 STL 实现
  • Z-Image-Turbo 云端 AI 绘画一键部署指南
  • 从零构建 Java CRM 系统:架构设计与实战解析
  • 基于 OpenCode 搭建 Skills 环境与项目实战开发
  • Java Web 开发基础与 Servlet 核心技术
  • 大模型 LLM 四阶段技术详解:从提示工程到预训练
  • 阿里 RynnBrain 具身智能模型:30B MoE 时空记忆架构与机器人开发实战
  • Qwen3.5-9B 参数量优势与架构分析:对比 GPT-oss-120B 及多模态能力
  • 2023 年电赛 H 题:信号分离装置 FPGA 与 STM32 实现方案
  • Qt Creator 配置 GitHub Copilot 插件
  • C++十大核心应用领域:技术栈与代码示例详解

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online