# Orange **Repository Path**: yufei88/orange ## Basic Information - **Project Name**: Orange - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-13 - **Last Updated**: 2026-02-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, SpringBoot, Redis, 模块化, API ## README # sync-utils项目 ## 介绍 - ###### 单体的springBoot封装第三方服务API - ###### 适用于APP、WEB、公众号,其他平台 - ###### 致力于搭建自己代码复用平台的码农工作者。 ## 软件架构 - ###### SpringBoot - ###### MyBatis-Plus - ###### Redis - ###### MySql ## 框架需求 ##### 一、请求参数校验统一校验 1. 统一返回校验不通过的字段列表 2. 增加校验配置类,可配置快速校验错误返回 3. 支持分组校验,不指定分组为默认按规则全部校验 4. 可自定义开发校验注解,自定义校验器规则 5. 支持请求类嵌套校验 6. 支持编程式校验,校验成功执行逻辑,校验失败执行其他逻辑 7. 支持请求数据为数组的校验,需要对数组进行包装 8. 支持枚举参数检验 ##### 二、业务ID统一规则生成 > 提供单独的模块统一生成各种业务的id,可以通过自定义注解实现 ##### 三、日志链路,日志ID追踪 > 保证每一次请求,都有统一的日志ID,使用MDC确保跨线程,跨服务的一次请求保持统一 ##### 四、异步日志保存 > 通过自定义注解+AOP实现日志记录保存 1. 登录日志 2. 业务操作日志(增加,修改,删除) ##### 五、字典值配置 > 字典值统一配置,加载(由数据库加载到redis缓存),字典值支持对第三方系统进行值映射 1. 系统启动时,刷新redis所有字典缓存(可配置开关控制) 2. 开发单独刷新系统字段值的接口,供外部调用刷新 3. 字典值可进行映射,例如:本系统的用户类型为1,调用微信时,可映射为A ##### 六、Agent三方系统模块化封装 > 第三方系统统一模块化接入,统一异常处理机制,模块分离,例如同时接入了微信,支付宝,或者其他平台的系统,单独封装当前平台的https请求类和响应处理类,统一处理公共参数请求参数和响应参数,统一处理异常,本系统调用时,只需要拿到正确响应报文就可以。 1. 请求公共参数封装 2. 统一响应公共参数封装 2. @AgentClient注解,定义具体请求接口的类上指定,此类为Interface,指定Url,具体的执行逻辑使用动态代理处理,动态代理的逻辑处理使用模板方法设计模式 ##### 七、接口安全性校验,Token+签名+APPID > 对第三方提供的服务,需要对第三方签发APPID,第三方请求时,请求头需携带AppID,签名(所有参数都参与Md5算法签名),Token可根据当前访问资源是否需要用户权限访问来确定是否携带。 1. AppID - 用于唯一标识一个应用或开发者账号,类似于用户的身份证号。 - 通常由平台自动分配,如微信开放平台、阿里云等 - 用于统计调用次数、管理应用生命周期(如更新、下架) > 用于存储用户/企业信息/第三方合作机构 2. AppKey - 用于标识 API 调用方的身份,类似“用户名” - 公开的,通常嵌入在客户端代码或请求参数中 - 与 `appSecret` 成对出现,用于首次认证(如申请 `access_token`) - 同一 `appId` 可对应多个 `appKey`,实现权限细分(如读写、只读) 3. AppSecret - 用于签名或加密请求,确保请求未被篡改,类似“密码” - 高度保密,仅存储在服务端和客户端安全环境中 - 用于生成签名(如 `SHA-256`、`MD5`),防止重放攻击 - 通常与时间戳(`timeStamp`)、随机数(`nonce`)结合使用 4. RSA做数据加密时,需单独提供公私钥用于数据加解密 > 一个APPID可以对应多个AppKey,比如第一个APPKey是用于 android平台调用,第二个是用于公众号,第三个是用于IOS应用 > > 用户请求时,带上Appkey,服务端可以查到相应的AppId,统计平台的调用次数, > > APPKey和AppId可以做系统数据关联,AppSecret不需要关联,这个主要是当公钥加密使用的,数据签名做盐值,加密数据,做公钥加密数据, > > > > 当应用服务端向第三方服务端发请求时,带上AppKey、时间戳、随机数、签名,签名可以使用 AppSecret + 时间戳 + 随机数+ 请求体参数使用sha1生成,第三方服务端收到后,生成本地签名和收到的签名比对,如果一致,校验成功 ##### 八、接口幂等性处理,防重复提交 > 防止用户的重复提交,通过自定义注解+拦截器处理 ##### 九、请求安全性校验 1. 防止Xss攻击 2. 跨域处理 3. IP白名单 ##### 十、定时任务配置 > 定时任务动态配置,动态执行 ##### 十一、统一结果返回 ```json { "code": "0000", "message": "成功", "traceId": "8368347884001", "data": { "body": {}, "sign": "cff054d1d7c84036a3dc160f9457e5f4" }, "error": [] } ``` ##### 十二、统一异常处理 ##### 十三、请求体和响应体加解密处理 ##### 十四、线程池配置,多线程请求 ## 使用说明 暂无 ## 参与贡献 暂无 ## 后续 > #### 实现功能 > > 1. SpringBoot+MyBatis-Plus基础框架搭建 > 2. 集成MySql+Druid > 3. baseController、baseService、baseEntity基类封装 > 4. 统一返回结果封装 > 5. 统一异常处理 > 6. hibernate-validator参数检验 > 7. HttpClient集成,工具类封装 > 8. 集成异步邮件发送功能 > 9. Redis集成,工具类封装 > 10. 集成SLF4j日志功能,日志分类保存 > 11. 集成分页插件 > 12. 异步日志保存(登录日志和业务日志) > 13. 安全性校验,Token+数据签名+APPID > 14. 接口幂等性处理 > 15. 定时任务动态配置 > 16. 项目启动数据字典初始化到redis > 17. 常用工具类封装【常量类封装、IP地址工具类封装、AES加解密工具类,spring获取been的工具类】 > 18. 集成swagger2,可自动生成api文档 > 19. 集成redis的消息队列 > > #### 后续集成 > > 1. 集成shiro权限控制 > 2. 不同用户数据权限过滤 > 3. fmpeg视频处理技术 > 4. 大文件切片上传、断点续传 > 5. Excel上传与下载 > 6. PDF报表文件下载 > 7. 消息中间件 > 8. 多数据源(mySql+pgSql) > 9. 过滤器防范Xss攻击 > 10. 请求参数校验 > 11. http请求模块公共响应参数,公共请求参数封装 > 12. 服务模块化分离,依赖分离 > > > > #### 使用技术 > > 1. mybatis plus > 2. 集成druid连接池 > 3. 集成swagger2,可自动生成api文档 > 4. 集成jwt(前后端api保护)、oauth2(第三方应用)、spring security权限控制 > 5. 集成redis3.2+ > 6. 集成rabbit/rocket/kafka mq消息队列 > 7. 集成spring boot admin,实时检测项目运行情况 > 8. 使用assembly maven插件进行不同环境打包部署,包含启动、重启命令,配置文件提取到外部config目录 > 9. Fastjson > 10. hibernate-validator > 11. Spring Boot2.1.6+ > 12. Spring Framework5.1.8+ > 13. Mybatis3.5.1+ > 14. reflections 反射工具包 > 15. commons-lang3 > 16. commons-io > 17. commons-codec > 18. commons-collections > 19. hutool-all 常用工具包 > 20. JDK1.8 > 21. Mysql5.7+ > 22. git插件 > 23. Lombok > 24. 热部署插件JRebel > 25. SLF4j 日志 > 26. fmpeg > 27. 分页插件 > 28. 多数据源 ## TODO 1. 业务逻辑处理的模板方法封装,参数检验,数据库查询,po数据组装,业务检验,http请求,结果组装,请求体参数打印 2. 注解名称修改,类名优化(✔) 3. 注解中可指定请求方式,在dataCommit()方法的具体请求中能区分 4. ConsumerHandler类内容优化,避免雷同 5. 日志打印优化,用户通过日志能看到请求的那个平台,接口url是啥,上送参数是啥,响应是啥,最好写在公共类中,计算请求时间,耗费多少时间。 6. 整理其他http请求的代码,写到Agent模块 7. 一句话名言的Agent模块开发 8. 另一个新闻接口的Agent模块开发 9. 翻译API的Agent模块开发 10. 字典值映射,自定义检验注解及逻辑