# FormValidation-CPP-Java **Repository Path**: yyl2291/FormValidation-CPP-Java ## Basic Information - **Project Name**: FormValidation-CPP-Java - **Description**: 基于 Qt 6.5(C++)与 Spring Boot 3.2(Java)双平台的表单校验解决方案,实现了合法性校验、输入长度控制、防重复提交、Tab顺序优化四大核心功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-09 - **Last Updated**: 2026-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C++/Java双平台表单校验实战 基于 Qt 6.5(C++)与 Spring Boot 3.2(Java)双平台的表单校验解决方案,实现了合法性校验、输入长度控制、防重复提交、Tab顺序优化四大核心功能。 ## 📋 项目概览 本项目旨在提供一套完整的表单校验解决方案,适用于金融支付、身份认证等高敏感场景,作为防御业务风险的第一道防线。 ### 核心功能 1. **合法性校验**:防 SQL 注入/XSS 攻击 2. **输入长度控制**:防内存溢出攻击 3. **防重复提交**:防止用户快速双击导致重复操作 4. **Tab顺序优化**:提升用户操作体验 ## 🛠 技术栈 ### C++/Qt 6.5 端 - **Qt 6.5**:跨平台 GUI 框架 - **C++17**:现代 C++ 标准 - **QRegularExpression**:正则表达式处理 - **QHash**:内存缓存实现 ### Java/Spring Boot 3.2 端 - **Spring Boot 3.2**:Java 后端框架 - **JSR-303 Validation**:参数校验 - **Redis**:分布式防重复提交(可选) - **Maven**:项目构建 ## 📁 项目结构 ``` FormValidation-CPP-Java/ ├── java-springboot/ # Java 后端实现 │ ├── src/main/java/com/formvalidation/ # Java 源码 │ │ ├── config/ # 配置类 │ │ ├── controller/ # 控制器 │ │ ├── validator/ # 验证器 │ │ └── FormValidationApplication.java # 应用启动类 │ ├── src/main/resources/ # 资源文件 │ └── pom.xml # Maven 配置 ├── qt-formvalidation/ # C++/Qt 前端实现 │ ├── include/ # 头文件 │ ├── src/ # 源文件 │ ├── resources/ # 资源文件(UI、图标等) │ └── formvalidation.pro # Qt 项目文件 └── README.md # 项目文档 ``` ## 🚀 快速开始 ### Java 后端 1. **环境要求**: - JDK 17+ - Maven 3.6+ - Redis(可选,用于防重复提交) 2. **构建与运行**: ```bash cd java-springboot mvn clean install mvn spring-boot:run ``` 3. **API 接口**: - POST `/api/transfer`:处理转账请求 - 请求体示例: ```json { "fromAccount": "123456789", "toAccount": "987654321", "amount": 100.00, "remark": "测试转账" } ``` ### C++/Qt 前端 1. **环境要求**: - Qt 6.5+ - C++17 兼容编译器 2. **构建与运行**: - 使用 Qt Creator 打开 `qt-formvalidation/formvalidation.pro` - 构建并运行项目 ## 📝 功能实现详情 ### 1. 合法性校验(防 SQL 注入/XSS) **C++/Qt 实现**: - 使用 `QRegularExpression` 检测危险字符 - 支持自定义正则表达式规则 - 提供 `sanitizeInput` 方法清理危险字符 **Java 实现**: - 使用 `Pattern` 类检测危险字符 - 结合 JSR-303 注解进行参数校验 - 提供 `sanitizeInput` 方法清理危险字符 ### 2. 输入长度控制(防内存溢出) **C++/Qt 实现**: - 限制最大输入长度 - 实时长度检查 - 防超长攻击 **Java 实现**: - 使用自定义 `@LengthConstraint` 注解 - 结合 `ValidatorUtils` 进行长度校验 - 防内存耗尽攻击 ### 3. 防重复提交 **C++/Qt 实现**: - 基于内存的本地缓存 - 时间窗口控制(默认 3 秒) - 自动清理过期缓存 **Java 实现**: - 基于 Redis 的分布式锁(优先) - 本地降级方案(无 Redis 时) - 支持自定义时间窗口 ### 4. Tab顺序优化 **C++/Qt 实现**: - 使用 `QWidget::setTabOrder` 定义合理的 Tab 顺序 - 符合用户操作习惯 - 提升表单填写效率 **Java 实现**: - 在 `TabOrderConfig` 中定义 Tab 顺序 - 前端 HTML 通过 `tabindex` 属性实现 - 后端用于验证和文档说明 ## 🎯 示例场景 ### 测试用例 1. **SQL 注入测试**: - 输入:`' OR 1=1--` - 预期:校验失败,提示包含非法字符 2. **超长输入测试**: - 输入:1000+ 字符的文本 - 预期:校验失败,提示输入过长 3. **重复提交测试**: - 快速双击提交按钮 - 预期:第二次提交被拦截,提示操作过于频繁 4. **Tab 顺序测试**: - 按 Tab 键导航表单 - 预期:按照 付款人账号 → 收款人账号 → 转账金额 → 备注 → 提交 → 取消 的顺序跳转 ## 🔒 安全特性 - **输入验证**:全面的输入合法性检查 - **长度限制**:防止内存溢出攻击 - **防重提交**:防止重复操作导致的业务风险 - **参数清理**:自动清理危险字符 - **分布式支持**:Java 端支持 Redis 分布式锁 ## 📄 许可证 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📞 联系 - 项目地址:https://github.com/GitOfUser/FormValidation-CPP-Java - 技术博客:https://blog.csdn.net/qq_46020877/article/details/150503468 --- **© 2024 L 李宇阳**