# guardian **Repository Path**: mybug/guardian ## Basic Information - **Project Name**: guardian - **Description**: 防重提交、接口限流、接口幂等、参数自动Trim、慢接口检测、请求链路追踪、IP黑白名单、防重放攻击、接口开关 —— 一个 Starter 搞定 API 请求防护。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/BigGG-Guardian/guardian - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 52 - **Created**: 2026-04-15 - **Last Updated**: 2026-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Maven Central Java Spring Boot License Release Stars

Guardian

轻量级 Spring Boot API 请求层防护框架

防重提交、接口限流、接口幂等、参数自动Trim、慢接口检测、请求链路追踪、IP黑白名单、防重放攻击、接口开关、参数签名、请求加解密 —— 一个 Starter 搞定 API 请求防护。

GitHub · Gitee · Maven Central

---

Guardian 功能全景图

--- ## 功能一览 | 功能 | Starter | 注解 | YAML | 说明 | |----------|----------------------------------------------|------|------|----------------------------------------------| | 防重复提交 | `guardian-repeat-submit-spring-boot-starter` | `@RepeatSubmit` | ✅ | 防止用户重复提交表单/请求 | | 接口限流 | `guardian-rate-limit-spring-boot-starter` | `@RateLimit` | ✅ | 滑动窗口 + 令牌桶,双算法可选 | | 接口幂等 | `guardian-idempotent-spring-boot-starter` | `@Idempotent` | — | Token 机制保证接口幂等性,支持结果缓存 | | 参数自动Trim | `guardian-auto-trim-spring-boot-starter` | — | ✅ | 自动去除请求参数首尾空格 + 不可见字符替换 | | 慢接口检测 | `guardian-slow-api-spring-boot-starter` | `@SlowApiThreshold` | ✅ | 慢接口检测 + Top N 统计 + Actuator 端点 | | 请求链路追踪 | `guardian-trace-spring-boot-starter` | — | ✅ | 自动生成/透传 TraceId,MDC 日志串联,支持跨线程传递、MQ 链路追踪 | | IP黑白名单 | `guardian-ip-filter-spring-boot-starter` | — | ✅ | 全局黑名单 + URL 绑定白名单,支持精确/通配符/CIDR | | 防重放攻击 | `guardian-anti-replay-spring-boot-starter` | — | ✅ | Timestamp + Nonce 双重校验,nonce TTL 与 timestamp 窗口解耦 | | 接口开关 | `guardian-api-switch-spring-boot-starter` | — | ✅ | 动态关闭/开启接口 | | 参数签名 | `guardian-sign-spring-boot-starter` | `@SignVerify` | ✅ | 支持多种签名算法,请求参数签名验证 + 响应结果签名 | | 请求加解密 | `guardian-encrypt-spring-boot-starter` | — | ✅ | 支持 RSA+AES / SM2+SM4 加密,请求解密 + 响应加密 | 每个功能独立模块、独立 Starter,**用哪个引哪个,互不依赖**。所有模块的 YAML 配置均支持**配置中心动态刷新**(Nacos / Apollo 等),无需重启即可生效。 --- # Spring Boot 3.5 + JDK 17 适配总结 > 适配日期:2026-06-24 > 涉及模块:全部 28 个 Maven 模块 > 构建结果:✅ BUILD SUCCESS --- ## 一、背景 项目从 Spring Boot 2.x(`javax.*` 命名空间)升级到 **Spring Boot 3.5.9 + JDK 17**,需要将所有 `javax.servlet`、`javax.annotation` 等 EE 命名空间迁移到 `jakarta.*`,同时修复 Spring 6.x 中被移除的 API。 Spring Boot 3.x 基于 Spring Framework 6,核心变化: - **Servlet API**:`javax.servlet` → `jakarta.servlet`(Servlet 5.0+) - **注解 API**:`javax.annotation.PostConstruct` → `jakarta.annotation.PostConstruct` - **移除 API**:`org.springframework.util.Base64Utils` 在 Spring 6 中已删除 --- ## 二、修改清单 ### 2.1 pom.xml 修改(14 个文件) #### 根 pom.xml(`pom.xml`) | 修改项 | 修改前 | 修改后 | |---|---|---| | 版本属性 | `4.0.1` | 删除(由 Spring Boot BOM 管理) | | dependencyManagement | `javax.servlet:javax.servlet-api` 显式声明版本 | 移除该条目,版本由 Spring Boot BOM 提供 | | guardian-starter-all 依赖管理 | 未声明 `pom` | 添加 `pom` | #### 12 个 core 模块 pom.xml 统一将 Servlet 依赖从 `javax` 迁移到 `jakarta`: ```xml javax.servlet javax.servlet-api provided jakarta.servlet jakarta.servlet-api provided ``` 涉及模块: | # | 模块 | 文件路径 | |---|---|---| | 1 | guardian-core | `guardian-core/pom.xml` | | 2 | guardian-encrypt-core | `guardian-encrypt/guardian-encrypt-core/pom.xml` | | 3 | guardian-api-switch-core | `guardian-api-switch/guardian-api-switch-core/pom.xml` | | 4 | guardian-sign-core | `guardian-sign/guardian-sign-core/pom.xml` | | 5 | guardian-ip-filter-core | `guardian-ip-filter/guardian-ip-filter-core/pom.xml` | | 6 | guardian-slow-api-core | `guardian-slow-api/guardian-slow-api-core/pom.xml` | | 7 | guardian-rate-limit-core | `guardian-rate-limit/guardian-rate-limit-core/pom.xml` | | 8 | guardian-trace-core | `guardian-trace/guardian-trace-core/pom.xml` | | 9 | guardian-auto-trim-core | `guardian-auto-trim/guardian-auto-trim-core/pom.xml` | | 10 | guardian-idempotent-core | `guardian-idempotent/guardian-idempotent-core/pom.xml` | | 11 | guardian-repeat-submit-core | `guardian-repeat-submit/guardian-repeat-submit-core/pom.xml` | | 12 | guardian-anti-replay-core | `guardian-anti-replay/guardian-anti-replay-core/pom.xml` | #### guardian-example/pom.xml ```xml io.github.biggg-guardian guardian-starter-all io.github.biggg-guardian guardian-starter-all pom ``` --- ### 2.2 Java 源码修改(6 个文件) #### 2.2.1 DigestUtils.java(Spring 6 API 移除适配) **文件**:`guardian-core/src/main/java/com/sun/guardian/core/utils/digest/DigestUtils.java` **问题**:`org.springframework.util.Base64Utils` 在 Spring Framework 6.x 中已移除。 **修改**: | 修改项 | 修改前 | 修改后 | |---|---|---| | import | `import org.springframework.util.Base64Utils;` | 删除(使用 JDK 内置 `java.util.Base64`) | | 编码调用(6 处) | `Base64Utils.encodeToString(bytes)` | `Base64.getEncoder().encodeToString(bytes)` | | 解码调用(10 处) | `Base64Utils.decodeFromString(str)` | `Base64.getDecoder().decode(str)` | | 版本注释 | `@version java version 1.8` | `@version 17` | #### 2.2.2 RepeatableRequestFilter.java **文件**:`guardian-core/src/main/java/com/sun/guardian/core/filter/RepeatableRequestFilter.java` | 修改项 | 修改前 | 修改后 | |---|---|---| | 版本注释 | `@version java version 1.8` | `@version 17` | > Servlet 相关 import(`jakarta.servlet.FilterChain` 等)已由用户提前手动修改。 #### 2.2.3 RepeatableRequestWrapper.java **文件**:`guardian-core/src/main/java/com/sun/guardian/core/wrapper/RepeatableRequestWrapper.java` | 修改项 | 修改前 | 修改后 | |---|---|---| | 版本注释 | `@version java version 1.8` | `@version 17` | #### 2.2.4 Trace 模块 PostConstruct 迁移(3 个文件) **问题**:`javax.annotation.PostConstruct` 在 JDK 17 中已移除,需迁移到 `jakarta.annotation.PostConstruct`。 | 文件 | 修改 | |---|---| | `guardian-trace-rabbitmq/.../GuardianTraceRabbitAutoConfiguration.java` | `import javax.annotation.PostConstruct` → `import jakarta.annotation.PostConstruct` | | `guardian-trace-kafka/.../GuardianTraceKafkaAutoConfiguration.java` | 同上 | | `guardian-trace-rocketmq/.../GuardianTraceRocketMQAutoConfiguration.java` | 同上 | --- ## 三、版本对照 | 组件 | 修改前 | 修改后 | |---|---|---| | Java | 1.8 | 17 | | Spring Boot | 2.x | 3.5.9 | | Servlet API | `javax.servlet:javax.servlet-api:4.0.1` | `jakarta.servlet:jakarta.servlet-api`(BOM 管理,6.0.0) | | 注解 API | `javax.annotation.PostConstruct` | `jakarta.annotation.PostConstruct` | | Base64 工具 | `org.springframework.util.Base64Utils`(已移除) | `java.util.Base64`(JDK 内置) | --- ## 四、修改文件汇总 共修改 **20 个文件**: | 类型 | 数量 | 文件 | |---|---|---| | 根 pom.xml | 1 | `pom.xml` | | 子模块 pom.xml | 13 | 12 个 core 模块 + `guardian-example/pom.xml` | | Java 源码 | 6 | `DigestUtils.java`、`RepeatableRequestFilter.java`、`RepeatableRequestWrapper.java`、3 个 Trace AutoConfiguration | --- ## 五、验证 ```bash mvn clean install -DskipTests -pl '!guardian-example' mvn clean compile -pl guardian-example -U ``` 结果:**BUILD SUCCESS**,全部 28 个模块编译通过。 --- ## 六、注意事项 1. **`javax.crypto.*` 无需迁移**:`javax.crypto.Cipher`、`javax.crypto.Mac` 等属于 JDK 标准 API,不属于 Jakarta EE,保持不变。 2. **Servlet 版本由 BOM 管理**:不要在 dependencyManagement 或子模块中显式指定 `jakarta.servlet-api` 的版本,由 Spring Boot BOM 统一管理(3.5.9 对应 6.0.0)。 3. **pom 类型依赖**:`guardian-starter-all` 打包类型为 `pom`,被依赖时必须声明 `pom`,否则 Maven 找不到 jar 会报错。 ## 开源协议 [Apache License 2.0](LICENSE)