Compare commits

...

37 Commits

Author SHA1 Message Date
c5e2516acd release: v2.0.0 2024-04-17 22:38:15 +08:00
2d71eca075 chore: 升级依赖
1.Spring Boot 3.1.9 => 3.1.10
2.Redisson 3.27.2 => 3.28.0(修复Failed to submit a listener notification task. Event loop shut down?)
3.CosId 2.6.6 => 2.6.8
4.SMS4J 3.1.1 => 3.2.1
5.Easy Excel 3.3.3 => 3.3.4
6.AWS S3 1.12.675 => 1.12.702
7.Crane4j 2.6.1 => 2.7.0(多对多装配处理器增强)
8.TLog 1.5.1 => 1.5.2
9.Hutool 5.8.26 => 5.8.27
10.IP2Region 3.1.9 => 3.1.10
2024-04-17 21:49:47 +08:00
fe310bcb87 style(extension/crud): 优化部分注释 2024-04-17 21:18:51 +08:00
8695cf9e09 chore: 部分代码格式优化 2024-04-16 22:44:33 +08:00
b0e567d749 chore: 移除 Qodana 扫描 2024-04-16 22:40:32 +08:00
f757438d1b refactor(web/xss): 优化 XSS 过滤部分代码 2024-04-16 22:39:34 +08:00
jasmine
c4051a6465 refactor: 应用关闭,关闭自定义线程池ScheduledExecutorService
* 程序结束,关闭ScheduledExecutorService 线程池。
2024-04-15 03:34:56 +00:00
dbb7a6319e chore: top.charles7c.continew => top.continew 2024-04-09 22:33:19 +08:00
whhya
2573fb04f0 feat(web/xss): XSS 增加过滤模式字段,提供清空、转义 2 种方式,默认使用清空模式
* update:完善XssProperties.mode属性为枚举类型
* feat(web/xss): xss增加过滤模式(mode)字段,提供清空(clean)/转义(escape)2种方式,默认使用clean模式
2024-04-09 02:15:31 +00:00
8c91d4a26c refactor(web): 优化 XSS 过滤部分代码 2024-03-30 21:42:51 +08:00
whhya
2656da450c feat(web): 新增 XSS 过滤器 2024-03-30 12:59:01 +00:00
2ff05c82ee chore: 更新版本号为 2.0.0-SNAPSHOT 2024-03-24 10:18:27 +08:00
24fda9a84e release: v1.5.1 2024-03-23 17:51:49 +08:00
0f43e1cff7 chore: 升级依赖
1.Redisson 3.27.1 => 3.27.2
2.Crane4j 2.6.0 => 2.6.1
2024-03-23 17:19:12 +08:00
171040b674 feat(web): FileUploadUtils 新增文件下载方法 2024-03-13 23:43:01 +08:00
ab4a72e0ff fix(api-doc): 修复接口级鉴权配置不生效的问题 2024-03-10 20:37:11 +08:00
ed15115e44 chore: 更新版本号为 1.5.1-SNAPSHOT 2024-03-10 20:28:41 +08:00
63d9e80240 release: v1.5.0 2024-03-08 23:11:43 +08:00
98261b96da chore: 升级依赖
1.Spring Boot 3.1.8 => 3.1.9
2.Redisson 3.26.0 => 3.27.1
3.Crane4j 2.5.0 => 2.6.0(适配条件注解)
4.Hutool 5.8.25 => 5.8.26
5.CosId 2.6.5 => 2.6.6
6.AWS S3 1.12.651 => 1.12.675
7.IP2Region 3.1.7 => 3.1.9
8.ttl 2.14.4 => 2.14.5
2024-03-08 22:33:39 +08:00
a54294df6e chore(json/jackson): 优化 Jackson 默认配置 2024-03-06 22:05:45 +08:00
12bdf3e44a chore(extension/crud): 调整 BaseController checkPermission 方法的访问修饰符 private => protected 2024-03-06 21:57:46 +08:00
36ce07b600 refactor(data/mybatis-plus): 重构 IService 及 BaseService 体系结构 2024-02-21 21:58:35 +08:00
244a4db17c chore: 更新版本号为 1.5.0-SNAPSHOT 2024-02-21 20:53:36 +08:00
1207983ce1 release: v1.4.1 2024-02-21 19:58:29 +08:00
ab7e987672 refactor(extension/crud): 调整 IService 到 data-core 2024-02-21 19:54:50 +08:00
9ed2dac00c refactor(cache/redisson): 完善 Redisson 工具类 2024-02-20 22:20:57 +08:00
9bd4583223 fix(data/mybatis-plus): 修复 Query In、Not In 查询数据类型转换错误 2024-02-20 21:40:06 +08:00
3f2a306cad refactor(data): 调整 Query 相关类到 data-core 2024-02-20 21:39:07 +08:00
31ca1fda52 feat(data/core): 新增获取数据库类型带默认类型方法 2024-02-19 21:40:48 +08:00
56a22c4bce refactor(log): continew-starter-log-common => continew-starter-log-core 2024-02-19 21:04:17 +08:00
4ffc5dc1d4 feat(data): 新增 continew-starter-data-core 模块
1.移动 MetaUtils core => data-core
2.新增 SQL 函数接口及数据库类型枚举
2024-02-19 21:00:07 +08:00
d42585cb4d refactor(core): 完善自定义异常类构造方法 2024-02-19 20:24:03 +08:00
c9867844b6 refactor: 优化字符串模板方法 API 使用 2024-02-18 22:44:06 +08:00
89108ad55a docs: 更新 Gitee 项目链接 2024-02-18 21:15:59 +08:00
557ea13757 style(data/mybatis-plus): 移除 ` 符号的使用,保持数据库无关性 2024-02-17 13:32:02 +08:00
2e5788f007 refactor(security/crypto): 调整部分 StrUtil => CharSequenceUtil 2024-02-16 19:18:12 +08:00
90eaab8dbd chore: 更新版本号为 1.4.1-SNAPSHOT 2024-02-16 19:16:42 +08:00
215 changed files with 1526 additions and 804 deletions

View File

@@ -8,23 +8,6 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
# Qodana 扫描
qodana-scan:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
checks: write
steps:
- name: Checkout
uses: actions/checkout@master
with:
ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit
fetch-depth: 0 # a full history is required for pull request analysis
- name: Scan
uses: JetBrains/qodana-action@v2023.3
env:
QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
# Sonar 扫描 # Sonar 扫描
sonar-scan: sonar-scan:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@@ -1,3 +1,96 @@
## [v2.0.0](https://github.com/Charles7c/continew-starter/compare/v1.5.1...v2.0.0) (2024-04-17)
### ✨ 新特性
- 【web】新增 XSS 过滤器 ([2656da4](https://github.com/Charles7c/continew-starter/commit/2656da450c866681c270c30131c028847e1e21d4)) ([2573fb0](https://github.com/Charles7c/continew-starter/commit/2573fb04f0698db3ab662a0e7bf762c04300468b)) ([Gitee PR#13](https://gitee.com/continew/continew-starter/pulls/13))
### 🐛 问题修复
- 【cache/redisson】修复Failed to submit a listener notification task. Event loop shut down? 问题 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
### 💎 功能优化
- 【core】应用关闭支持优雅关闭自定义线程池 ScheduledExecutorService ([c4051a6](https://github.com/Charles7c/continew-starter/commit/c4051a6465e0d70d119ec27c6ae4eb4d1893339a))
- 【extension/crud】优化部分注释 ([fe310bc](https://github.com/Charles7c/continew-starter/commit/fe310bcb879d3f20eb8ead4b39436ec96b99e7f6))
- 移除 Qodana 扫描License 已过期 ([b0e567d](https://github.com/Charles7c/continew-starter/commit/b0e567d749b988e3f45772742a273a422a661edb))
### 📦 依赖升级
- 【dependencies】Spring Boot 3.1.9 => 3.1.10 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】Redisson 3.27.2 => 3.28.0 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】CosId 2.6.6 => 2.6.8 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】SMS4J 3.1.1 => 3.2.1 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】Easy Excel 3.3.3 => 3.3.4 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】AWS S3 1.12.675 => 1.12.702 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】Crane4j 2.6.1 => 2.7.0 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】TLog 1.5.1 => 1.5.2 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】Hutool 5.8.26 => 5.8.27 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
- 【dependencies】IP2Region 3.1.9 => 3.1.10 ([2d71eca](https://github.com/Charles7c/continew-starter/commit/2d71eca07505f143c82cca8d24bc6f54105d0bbb))
### 💥 破坏性变更
- groupId 及基础包名调整更短的包名聚合品牌形象。top.charles7c.continew => top.continew ([dbb7a63](https://github.com/Charles7c/continew-starter/commit/dbb7a6319e9440e7a05f2eb4aab3b445f43197f7))
## [v1.5.1](https://github.com/Charles7c/continew-starter/compare/v1.5.0...v1.5.1) (2024-03-23)
### ✨ 新特性
- 【web】FileUploadUtils 新增文件下载方法 ([171040b](https://github.com/Charles7c/continew-starter/commit/171040b674ae18dd6560f1501f7c0d47a1f4b8ba))
### 🐛 问题修复
- 【api-doc】修复接口级鉴权配置不生效的问题 ([ab4a72e](https://github.com/Charles7c/continew-starter/commit/ab4a72e0fffe20b492c2250cc997ba3e94794118))
### 📦 依赖升级
- 【dependencies】Redisson 3.27.1 => 3.27.2 ([0f43e1c](https://github.com/Charles7c/continew-starter/commit/0f43e1cff7f2fc58273de300acf4432f3a300af4))
- 【dependencies】Crane4j 2.6.0 => 2.6.1 ([0f43e1c](https://github.com/Charles7c/continew-starter/commit/0f43e1cff7f2fc58273de300acf4432f3a300af4))
## [v1.5.0](https://github.com/Charles7c/continew-starter/compare/v1.4.1...v1.5.0) (2024-03-08)
### 💎 功能优化
- 【data/mybatis-plus】重构 IService 及 BaseService 体系结构 ([36ce07b](https://github.com/Charles7c/continew-starter/commit/36ce07b600fc54eeca3682d09aa5992cb2b35c17))
- 【json/jackson】优化 Jackson 默认配置 ([a54294d](https://github.com/Charles7c/continew-starter/commit/a54294df6e24dc36d36cf6a94559af2ed4c32d44))
- 【extension/crud】调整 BaseController checkPermission 方法的访问修饰符 private => protected ([12bdf3e](https://github.com/Charles7c/continew-starter/commit/12bdf3e44a10e9683b8605642eac9c463c590af4))
### 📦 依赖升级
- 【dependencies】Spring Boot 3.1.8 => 3.1.9 ([98261b9](https://github.com/Charles7c/continew-starter/commit/98261b96dacdba9d210790112248d798e292ae0b))
- 【dependencies】Redisson 3.26.0 => 3.27.1 ([98261b9](https://github.com/Charles7c/continew-starter/commit/98261b96dacdba9d210790112248d798e292ae0b))
- 【dependencies】Crane4j 2.5.0 => 2.6.0 ([98261b9](https://github.com/Charles7c/continew-starter/commit/98261b96dacdba9d210790112248d798e292ae0b))
- 【dependencies】Hutool 5.8.25 => 5.8.26 ([98261b9](https://github.com/Charles7c/continew-starter/commit/98261b96dacdba9d210790112248d798e292ae0b))
- 【dependencies】CosId 2.6.5 => 2.6.6 ([98261b9](https://github.com/Charles7c/continew-starter/commit/98261b96dacdba9d210790112248d798e292ae0b))
- 【dependencies】Amazon S3 1.12.651 => 1.12.675 ([98261b9](https://github.com/Charles7c/continew-starter/commit/98261b96dacdba9d210790112248d798e292ae0b))
- 【dependencies】Ip2region 3.1.7 => 3.1.9 ([98261b9](https://github.com/Charles7c/continew-starter/commit/98261b96dacdba9d210790112248d798e292ae0b))
- 【dependencies】TTL 2.14.4 => 2.14.5 ([98261b9](https://github.com/Charles7c/continew-starter/commit/98261b96dacdba9d210790112248d798e292ae0b))
## [v1.4.1](https://github.com/Charles7c/continew-starter/compare/v1.4.0...v1.4.1) (2024-02-21)
### ✨ 新特性
- 【data/core】新增 continew-starter-data-core 模块 ([4ffc5dc](https://github.com/Charles7c/continew-starter/commit/4ffc5dc1d4cdbb572070312eef172a197e216318))
- 【data/core】新增获取数据库类型带默认类型方法 ([31ca1fd](https://github.com/Charles7c/continew-starter/commit/31ca1fda528629906958d8422897ac8ae179daab))
### 💎 功能优化
- 【security/crypto】调整部分 StrUtil => CharSequenceUtil ([2e5788f](https://github.com/Charles7c/continew-starter/commit/2e5788f007f61f0ec531aa69834229d128311398))
- 【data/mybatis-plus】移除 ` 符号的使用,保持数据库无关性 ([557ea13](https://github.com/Charles7c/continew-starter/commit/557ea1375728695c027004e64e2fa8d2d66215e6))
- 【core】完善自定义异常类构造方法 ([d42585c](https://github.com/Charles7c/continew-starter/commit/d42585cb4d6660724db004893f57a6c67b4690e1))
- 【cache/redisson】完善 Redisson 工具类 ([9ed2dac](https://github.com/Charles7c/continew-starter/commit/9ed2dac00c58621cbc133e3e072c100306cf170a))
- 优化字符串模板方法 API 使用 ([c986784](https://github.com/Charles7c/continew-starter/commit/c9867844b650a69f6b3b3ea4f9af67807091eb1b))
### 🐛 问题修复
- 【data/mybatis-plus】修复 Query In、Not In 查询数据类型转换错误 ([9bd4583](https://github.com/Charles7c/continew-starter/commit/9bd458322339f3197f1925347ff16f53fe0f3856))
### 💥 破坏性变更
- 【log/core】continew-starter-log-common => continew-starter-log-core ([56a22c4](https://github.com/Charles7c/continew-starter/commit/56a22c4bce2445fb135d1fce7b6155fd5b48051e))
- 【data/mybatis-plus】调整 Query 相关类到 data-core ([3f2a306](https://github.com/Charles7c/continew-starter/commit/3f2a306cad1d15436ae36c1b2eb54f28b50e84b9))
- 【extension/crud】调整 IService 到 data-core ([ab7e987](https://github.com/Charles7c/continew-starter/commit/ab7e987672202f3e80c0e4f64ea0c576ff7cc89f))
- 更新 Gitee 项目链接 ([89108ad](https://github.com/Charles7c/continew-starter/commit/89108ad55addeaf47f224f4ed90ecb42244dbfd8))
## [v1.4.0](https://github.com/Charles7c/continew-starter/compare/v1.3.0...v1.4.0) (2024-02-14) ## [v1.4.0](https://github.com/Charles7c/continew-starter/compare/v1.3.0...v1.4.0) (2024-02-14)
### ✨ 新特性 ### ✨ 新特性
@@ -22,7 +115,7 @@
### 🐛 问题修复 ### 🐛 问题修复
- 【extension/crud】修复删除后置处理方法访问修饰符使用错误 ([24f9975](https://github.com/Charles7c/continew-starter/commit/24f99754d041e113f07eb43570d6a49c4ff24008)) - 【extension/crud】修复删除后置处理方法访问修饰符使用错误 ([24f9975](https://github.com/Charles7c/continew-starter/commit/24f99754d041e113f07eb43570d6a49c4ff24008))
- 【message/mail】修复发送邮件收件人不为空判断错误 ([Gitee PR#12](https://gitee.com/Charles7c/continew-starter/pulls/12)) - 【message/mail】修复发送邮件收件人不为空判断错误 ([Gitee PR#12](https://gitee.com/continew/continew-starter/pulls/12))
- 【auth/satoken】修复 SaInterceptor Bean 获取方式错误 ([1ba1596](https://github.com/Charles7c/continew-starter/commit/1ba1596f4e4b31d82e174e981711e45a1df67ee7)) - 【auth/satoken】修复 SaInterceptor Bean 获取方式错误 ([1ba1596](https://github.com/Charles7c/continew-starter/commit/1ba1596f4e4b31d82e174e981711e45a1df67ee7))
### 📦 依赖升级 ### 📦 依赖升级
@@ -46,19 +139,19 @@
### ✨ 新特性 ### ✨ 新特性
* 【data/mybatis-plus】新增 QueryIgnore 忽略查询解析注解 ([91651b0](https://github.com/Charles7c/continew-starter/commit/91651b0b59cf642cd59aca068d8bca4554dc9895)) * 【data/mybatis-plus】新增 QueryIgnore 忽略查询解析注解 ([91651b0](https://github.com/Charles7c/continew-starter/commit/91651b0b59cf642cd59aca068d8bca4554dc9895))
* 【security/password】新增安全模块-密码编码器自动配置 ([47a4d57](https://github.com/Charles7c/continew-starter/commit/47a4d57dee3739de12ccbe9e15e25aef5b9ae558)) ([Gitee PR#9](https://gitee.com/Charles7c/continew-starter/pulls/9)) * 【security/password】新增安全模块-密码编码器自动配置 ([47a4d57](https://github.com/Charles7c/continew-starter/commit/47a4d57dee3739de12ccbe9e15e25aef5b9ae558)) ([Gitee PR#9](https://gitee.com/continew/continew-starter/pulls/9))
* 【web】新增链路跟踪自动配置 ([8fc19ab](https://github.com/Charles7c/continew-starter/commit/8fc19ab9b87b1a1b6d290ee9a40d0157de267324)) * 【web】新增链路跟踪自动配置 ([8fc19ab](https://github.com/Charles7c/continew-starter/commit/8fc19ab9b87b1a1b6d290ee9a40d0157de267324))
### 💎 功能优化 ### 💎 功能优化
- 【extension/crud】排序字段增加是否存在校验 ([Gitee PR#7](https://gitee.com/Charles7c/continew-starter/pulls/7)) - 【extension/crud】排序字段增加是否存在校验 ([Gitee PR#7](https://gitee.com/continew/continew-starter/pulls/7))
- 【data/mybatis-plus】优化数据权限处理器代码结构 ([aecefa1](https://github.com/Charles7c/continew-starter/commit/aecefa15ecbb9660f2ffa2f3bef3ad9eeb810916)) - 【data/mybatis-plus】优化数据权限处理器代码结构 ([aecefa1](https://github.com/Charles7c/continew-starter/commit/aecefa15ecbb9660f2ffa2f3bef3ad9eeb810916))
- 【auth/satoken】支持更灵活的动态化路由拦截鉴权 ([31f29db](https://github.com/Charles7c/continew-starter/commit/31f29db19dede2cbf6988946b0dd8c8f153d1bd9)) - 【auth/satoken】支持更灵活的动态化路由拦截鉴权 ([31f29db](https://github.com/Charles7c/continew-starter/commit/31f29db19dede2cbf6988946b0dd8c8f153d1bd9))
- 【auth/satoken】优化 SaToken 持久层配置 ([e6f8ac8](https://github.com/Charles7c/continew-starter/commit/e6f8ac8afa1b6c487343dc88d8ac7fdfde40e58b)) - 【auth/satoken】优化 SaToken 持久层配置 ([e6f8ac8](https://github.com/Charles7c/continew-starter/commit/e6f8ac8afa1b6c487343dc88d8ac7fdfde40e58b))
- 【captcha/behavior】优化行为验证码缓存配置 ([8598e6d](https://github.com/Charles7c/continew-starter/commit/8598e6d109c1ca6be3e973ceb41c6dd7bd93c333)) - 【captcha/behavior】优化行为验证码缓存配置 ([8598e6d](https://github.com/Charles7c/continew-starter/commit/8598e6d109c1ca6be3e973ceb41c6dd7bd93c333))
- 【storage/local】优化存储模块依赖 ([dcb6568](https://github.com/Charles7c/continew-starter/commit/dcb6568916cd549f1c403ece1c4f4d29ecc320b9)) - 【storage/local】优化存储模块依赖 ([dcb6568](https://github.com/Charles7c/continew-starter/commit/dcb6568916cd549f1c403ece1c4f4d29ecc320b9))
- 移除 Lombok 私有构造注解使用 ([11d0798](https://github.com/Charles7c/continew-starter/commit/11d0798f92a5fe4eda6300a7e6065f2d3afef0df)) - 移除 Lombok 私有构造注解使用 ([11d0798](https://github.com/Charles7c/continew-starter/commit/11d0798f92a5fe4eda6300a7e6065f2d3afef0df))
- 移除 Lombok 依赖,再度精简依赖 ([0eb6afa](https://github.com/Charles7c/continew-starter/commit/0eb6afabb6ccaa9d421981280c896e381f68b9a6)) ([Gitee PR#9](https://gitee.com/Charles7c/continew-starter/pulls/9)) - 移除 Lombok 依赖,再度精简依赖 ([0eb6afa](https://github.com/Charles7c/continew-starter/commit/0eb6afabb6ccaa9d421981280c896e381f68b9a6)) ([Gitee PR#9](https://gitee.com/continew/continew-starter/pulls/9))
- 新增 Qodana、Sonar 扫描 ([ab1e999](https://github.com/Charles7c/continew-starter/commit/ab1e999094d9349a24eff51382a940f0ec682801)) ([1a8c589](https://github.com/Charles7c/continew-starter/commit/1a8c589083f80eddd2fe7e4c99751c699dd4d357)) - 新增 Qodana、Sonar 扫描 ([ab1e999](https://github.com/Charles7c/continew-starter/commit/ab1e999094d9349a24eff51382a940f0ec682801)) ([1a8c589](https://github.com/Charles7c/continew-starter/commit/1a8c589083f80eddd2fe7e4c99751c699dd4d357))
- 优化大量代码,解决 [Sonar](https://sonarcloud.io/organizations/charles7c/projects)、[Codacy](https://app.codacy.com/gh/Charles7c/continew-admin/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)、[Qodana](https://qodana.cloud/organizations/pQDPD/teams/p5jqd/) 扫描问题点击各链接查看对应实时质量分析报告Codacy 已达到 A - 优化大量代码,解决 [Sonar](https://sonarcloud.io/organizations/charles7c/projects)、[Codacy](https://app.codacy.com/gh/Charles7c/continew-admin/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)、[Qodana](https://qodana.cloud/organizations/pQDPD/teams/p5jqd/) 扫描问题点击各链接查看对应实时质量分析报告Codacy 已达到 A
@@ -89,7 +182,7 @@
- 新增部分 Maven 插件版本锁定 ([be14bca](https://github.com/Charles7c/continew-starter/commit/be14bca2ca6ba5a808f7feebaafcf9356d338643)) - 新增部分 Maven 插件版本锁定 ([be14bca](https://github.com/Charles7c/continew-starter/commit/be14bca2ca6ba5a808f7feebaafcf9356d338643))
- 移除部分无用 Maven 配置 ([6d9e8b4](https://github.com/Charles7c/continew-starter/commit/6d9e8b43ebe8d891ab459a2c2f21e06936abdc1d)) - 移除部分无用 Maven 配置 ([6d9e8b4](https://github.com/Charles7c/continew-starter/commit/6d9e8b43ebe8d891ab459a2c2f21e06936abdc1d))
- 全局统一 Hutool 版本,精简各模块 Hutool 依赖 ([Gitee PR#6](https://gitee.com/Charles7c/continew-starter/pulls/6)) - 全局统一 Hutool 版本,精简各模块 Hutool 依赖 ([Gitee PR#6](https://gitee.com/continew/continew-starter/pulls/6))
- 调整部分类的所在包 ([b4b40b4](https://github.com/Charles7c/continew-starter/commit/b4b40b4cb929824e44bc7ad8737cbe73b283b34d)) - 调整部分类的所在包 ([b4b40b4](https://github.com/Charles7c/continew-starter/commit/b4b40b4cb929824e44bc7ad8737cbe73b283b34d))
### 🐛 问题修复 ### 🐛 问题修复
@@ -112,7 +205,7 @@
### 💎 功能优化 ### 💎 功能优化
- 【log/httptrace-pro】优化日志过滤器仅在需要记录请求体、响应体时进行过滤 ([d68d88d](https://github.com/Charles7c/continew-starter/commit/d68d88db218d5008140c3056827dd6ac608a8b62)) - 【log/httptrace-pro】优化日志过滤器仅在需要记录请求体、响应体时进行过滤 ([d68d88d](https://github.com/Charles7c/continew-starter/commit/d68d88db218d5008140c3056827dd6ac608a8b62))
- 【log/httptrace-pro】优化 @Log 注解信息获取优先级逻辑 ([Gitee PR#5](https://gitee.com/Charles7c/continew-starter/pulls/5)) - 【log/httptrace-pro】优化 @Log 注解信息获取优先级逻辑 ([Gitee PR#5](https://gitee.com/continew/continew-starter/pulls/5))
- 【extension/crud】优化 BaseServiceImpl 中获取各泛型参数类型的方式 ([6fc0b51](https://github.com/Charles7c/continew-starter/commit/6fc0b51a574434db9d21d1f254b3fce344c9f2f6)) - 【extension/crud】优化 BaseServiceImpl 中获取各泛型参数类型的方式 ([6fc0b51](https://github.com/Charles7c/continew-starter/commit/6fc0b51a574434db9d21d1f254b3fce344c9f2f6))
- 【extension/crud】减少查询列表时可能的无用转换 ([0565372](https://github.com/Charles7c/continew-starter/commit/0565372e9aa8010a1c4625be4cf85d557a7eed7b)) - 【extension/crud】减少查询列表时可能的无用转换 ([0565372](https://github.com/Charles7c/continew-starter/commit/0565372e9aa8010a1c4625be4cf85d557a7eed7b))
- 使用常量优化部分配置属性名 ([2025068](https://github.com/Charles7c/continew-starter/commit/20250681da7682de159b6259e80193b204e55047)) - 使用常量优化部分配置属性名 ([2025068](https://github.com/Charles7c/continew-starter/commit/20250681da7682de159b6259e80193b204e55047))
@@ -131,7 +224,7 @@
* 【storage/local】新增 continew-starter-storage-local 本地存储模块 ([cd6826a](https://github.com/Charles7c/continew-starter/commit/cd6826a0abe0666f9fe867e92bf70abb47e5ff2e)) * 【storage/local】新增 continew-starter-storage-local 本地存储模块 ([cd6826a](https://github.com/Charles7c/continew-starter/commit/cd6826a0abe0666f9fe867e92bf70abb47e5ff2e))
* 【cache/redisson】RedisUtils 新增限流方法 ([9cf3ae8](https://github.com/Charles7c/continew-starter/commit/9cf3ae87a1a20db9ee8b2b7272e8328b5fc5c20c)) * 【cache/redisson】RedisUtils 新增限流方法 ([9cf3ae8](https://github.com/Charles7c/continew-starter/commit/9cf3ae87a1a20db9ee8b2b7272e8328b5fc5c20c))
* 【data/mybatis-plus】新增数据权限默认解决方案 ([621a5e3](https://github.com/Charles7c/continew-starter/commit/621a5e3b22db9b81d31c65b39ad387a8531e09af)) * 【data/mybatis-plus】新增数据权限默认解决方案 ([621a5e3](https://github.com/Charles7c/continew-starter/commit/621a5e3b22db9b81d31c65b39ad387a8531e09af))
* 【captcha/behavior】新增 continew-starter-captcha-behavior 行为验证码模块 ([Gitee PR#1](https://gitee.com/Charles7c/continew-starter/pulls/1)) * 【captcha/behavior】新增 continew-starter-captcha-behavior 行为验证码模块 ([Gitee PR#1](https://gitee.com/continew/continew-starter/pulls/1))
* 【core】新增 PATH_PATTERN 字符串常量 ([76e282c](https://github.com/Charles7c/continew-starter/commit/76e282c7965fdfa39854fe77397687bbc40d0f7f)) * 【core】新增 PATH_PATTERN 字符串常量 ([76e282c](https://github.com/Charles7c/continew-starter/commit/76e282c7965fdfa39854fe77397687bbc40d0f7f))
### 💎 功能优化 ### 💎 功能优化

View File

@@ -4,10 +4,10 @@
<img src="https://img.shields.io/badge/License-LGPL--3.0-blue.svg" alt="License" /> <img src="https://img.shields.io/badge/License-LGPL--3.0-blue.svg" alt="License" />
</a> </a>
<a href="https://central.sonatype.com/search?q=continew-starter" target="_blank"> <a href="https://central.sonatype.com/search?q=continew-starter" target="_blank">
<img src="https://img.shields.io/maven-central/v/top.charles7c.continew/continew-starter.svg?label=Maven%20Central&logo=sonatype&logoColor=FFF" alt="Release" /> <img src="https://img.shields.io/maven-central/v/top.continew/continew-starter.svg?label=Maven%20Central&logo=sonatype&logoColor=FFF" alt="Release" />
</a> </a>
<a href="https://github.com/Charles7c/continew-starter" target="_blank"> <a href="https://github.com/Charles7c/continew-starter" target="_blank">
<img src="https://img.shields.io/badge/RELEASE-v1.4.0-%23ff3f59.svg" alt="Release" /> <img src="https://img.shields.io/badge/RELEASE-v2.0.0-%23ff3f59.svg" alt="Release" />
</a> </a>
<a href="https://app.codacy.com/gh/Charles7c/continew-starter/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade" target="_blank"> <a href="https://app.codacy.com/gh/Charles7c/continew-starter/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade" target="_blank">
<img src="https://app.codacy.com/project/badge/Grade/90ed633957a9410aa8745f0654827c01" alt="Codacy Badge" /> <img src="https://app.codacy.com/project/badge/Grade/90ed633957a9410aa8745f0654827c01" alt="Codacy Badge" />
@@ -16,7 +16,7 @@
<img src="https://sonarcloud.io/api/project_badges/measure?project=Charles7c_continew-starter&metric=alert_status" alt="Sonar Status" /> <img src="https://sonarcloud.io/api/project_badges/measure?project=Charles7c_continew-starter&metric=alert_status" alt="Sonar Status" />
</a> </a>
<a href="https://spring.io/projects/spring-boot" target="_blank"> <a href="https://spring.io/projects/spring-boot" target="_blank">
<img src="https://img.shields.io/badge/Spring Boot-3.1.8-%236CB52D.svg?logo=Spring-Boot" alt="Spring Boot" /> <img src="https://img.shields.io/badge/Spring Boot-3.1.10-%236CB52D.svg?logo=Spring-Boot" alt="Spring Boot" />
</a> </a>
<a href="https://github.com/Charles7c/continew-starter" target="_blank"> <a href="https://github.com/Charles7c/continew-starter" target="_blank">
<img src="https://img.shields.io/badge/Open JDK-17-%236CB52D.svg?logo=OpenJDK&logoColor=FFF" alt="Open JDK" /> <img src="https://img.shields.io/badge/Open JDK-17-%236CB52D.svg?logo=OpenJDK&logoColor=FFF" alt="Open JDK" />
@@ -27,11 +27,11 @@
<a href="https://github.com/Charles7c/continew-starter" target="_blank"> <a href="https://github.com/Charles7c/continew-starter" target="_blank">
<img src="https://img.shields.io/github/forks/Charles7c/continew-starter?style=social" alt="GitHub forks" /> <img src="https://img.shields.io/github/forks/Charles7c/continew-starter?style=social" alt="GitHub forks" />
</a> </a>
<a href="https://gitee.com/Charles7c/continew-starter" target="_blank"> <a href="https://gitee.com/continew/continew-starter" target="_blank">
<img src="https://gitee.com/Charles7c/continew-starter/badge/star.svg?theme=white" alt="Gitee stars" /> <img src="https://gitee.com/continew/continew-starter/badge/star.svg?theme=white" alt="Gitee stars" />
</a> </a>
<a href="https://gitee.com/Charles7c/continew-starter" target="_blank"> <a href="https://gitee.com/continew/continew-starter" target="_blank">
<img src="https://gitee.com/Charles7c/continew-starter/badge/fork.svg?theme=white" alt="Gitee forks" /> <img src="https://gitee.com/continew/continew-starter/badge/fork.svg?theme=white" alt="Gitee forks" />
</a> </a>
## 简介 ## 简介
@@ -66,7 +66,7 @@ ContiNew Starter 就是将脚手架项目中的通用基础配置进行了封装
| 开源平台 | 源码地址 | | 开源平台 | 源码地址 |
| :------------ | :-------------------------------------------- | | :------------ | :-------------------------------------------- |
| GitHub | https://github.com/Charles7c/continew-starter | | GitHub | https://github.com/Charles7c/continew-starter |
| Gitee码云 | https://gitee.com/Charles7c/continew-starter | | Gitee码云 | https://gitee.com/continew/continew-starter |
## 像数123一样容易 ## 像数123一样容易
@@ -76,7 +76,7 @@ ContiNew Starter 就是将脚手架项目中的通用基础配置进行了封装
```xml ```xml
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter</artifactId> <artifactId>continew-starter</artifactId>
<version>{latest-version}</version> <version>{latest-version}</version>
</parent> </parent>
@@ -96,7 +96,7 @@ ContiNew Starter 就是将脚手架项目中的通用基础配置进行了封装
<dependencies> <dependencies>
<!-- ContiNew Starter Dependencies --> <!-- ContiNew Starter Dependencies -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-dependencies</artifactId> <artifactId>continew-starter-dependencies</artifactId>
<version>{latest-version}</version> <version>{latest-version}</version>
<type>pom</type> <type>pom</type>
@@ -112,7 +112,7 @@ ContiNew Starter 就是将脚手架项目中的通用基础配置进行了封装
<dependencies> <dependencies>
<!-- Web 模块 --> <!-- Web 模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-web</artifactId> <artifactId>continew-starter-web</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
@@ -137,31 +137,6 @@ continew-starter.web:
exposed-headers: '*' exposed-headers: '*'
``` ```
<details>
<summary>抢先体验快照SNAPSHOT版本💡</summary>
> **注意:** 快照版本目前处于开发测试阶段,其中很多特性或改动尚不稳定,可能会因为修复或优化而频繁调整。因此,仅可用于体验,切勿用于生产环境!
1.在项目 pom.xml 中配置 SNAPSHOT快照仓库地址如果你已配有其他仓库地址追加下方快照仓库地址即可
```xml
<repositories>
<repository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
```
2.将 ContiNew Starter 版本改为对应快照版本例如1.3.0-SNAPSHOT
</details>
## 模块结构 ## 模块结构
### 核心模块 ### 核心模块
@@ -189,7 +164,6 @@ continew-starter.web:
| continew-starter-security-password | 密码编码器 | | | continew-starter-security-password | 密码编码器 | |
| continew-starter-security-mask | JSON 脱敏 | | | continew-starter-security-mask | JSON 脱敏 | |
| continew-starter-security-crypto | 数据库字段加/解密 | | | continew-starter-security-crypto | 数据库字段加/解密 | |
| continew-starter-security-all | | |
### Web模块 ### Web模块
@@ -201,6 +175,7 @@ continew-starter.web:
| 模块名称 | 模块说明 | 依赖版本 | | 模块名称 | 模块说明 | 依赖版本 |
| ---------------------------------- | ----------------------------------------- | -------- | | ---------------------------------- | ----------------------------------------- | -------- |
| continew-starter-log-core | 日志核心模块 | |
| continew-starter-log-httptrace-pro | Spring Boot Actuator HttpTrace 重置增强版 | | | continew-starter-log-httptrace-pro | Spring Boot Actuator HttpTrace 重置增强版 | |
### 存储模块 ### 存储模块
@@ -234,6 +209,7 @@ continew-starter.web:
| 模块名称 | 模块说明 | 依赖版本 | | 模块名称 | 模块说明 | 依赖版本 |
| ---------------------------------- | --------------------- | ------------------------------------------------------------ | | ---------------------------------- | --------------------- | ------------------------------------------------------------ |
| continew-starter-data-core | 数据访问核心模块 | |
| continew-starter-data-mybatis-plus | MyBatis Plus 自动配置 | <a href="https://baomidou.com/" target="_blank">MyBatis Plus</a>3.5.5<br /><a href="https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611" target="_blank">dynamic-datasource-spring-boot-starter</a>4.3.0<br /><a href="https://github.com/p6spy/p6spy" target="_blank">P6Spy</a>3.9.1 | | continew-starter-data-mybatis-plus | MyBatis Plus 自动配置 | <a href="https://baomidou.com/" target="_blank">MyBatis Plus</a>3.5.5<br /><a href="https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611" target="_blank">dynamic-datasource-spring-boot-starter</a>4.3.0<br /><a href="https://github.com/p6spy/p6spy" target="_blank">P6Spy</a>3.9.1 |
### 认证模块 ### 认证模块
@@ -248,7 +224,6 @@ continew-starter.web:
| 模块名称 | 模块说明 | 依赖版本 | | 模块名称 | 模块说明 | 依赖版本 |
| ------------------------------- | -------- | ------------------------------------------------------------ | | ------------------------------- | -------- | ------------------------------------------------------------ |
| continew-starter-messaging-mail | 邮件 | Jakarta Mail1.1.0 | | continew-starter-messaging-mail | 邮件 | Jakarta Mail1.1.0 |
| continew-starter-messaging-sms | 短信 | <a href="https://sms4j.com/" target="_blank">SMS4J</a>3.1.1 |
### 扩展模块 ### 扩展模块

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter</artifactId> <artifactId>continew-starter</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -21,7 +21,7 @@
<!-- 核心模块 --> <!-- 核心模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-core</artifactId> <artifactId>continew-starter-core</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.apidoc.autoconfigure; package top.continew.starter.apidoc.autoconfigure;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.Components;
@@ -38,9 +38,9 @@ import org.springframework.http.CacheControl;
import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import top.charles7c.continew.starter.core.autoconfigure.project.ProjectProperties; import top.continew.starter.core.autoconfigure.project.ProjectProperties;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import top.charles7c.continew.starter.core.util.GeneralPropertySourceFactory; import top.continew.starter.core.util.GeneralPropertySourceFactory;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -75,7 +75,7 @@ public class SpringDocAutoConfiguration implements WebMvcConfigurer {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public OpenAPI openApi(ProjectProperties projectProperties, SpringDocExtensionProperties properties) { public OpenAPI openApi(ProjectProperties projectProperties, SpringDocExtensionProperties properties) {
Info info = new Info().title(String.format("%s %s", projectProperties.getName(), "API 文档")) Info info = new Info().title("%s %s".formatted(projectProperties.getName(), "API 文档"))
.version(projectProperties.getVersion()) .version(projectProperties.getVersion())
.description(projectProperties.getDescription()); .description(projectProperties.getDescription());
ProjectProperties.Contact contact = projectProperties.getContact(); ProjectProperties.Contact contact = projectProperties.getContact();
@@ -86,28 +86,27 @@ public class SpringDocAutoConfiguration implements WebMvcConfigurer {
if (null != license) { if (null != license) {
info.license(new License().name(license.getName()).url(license.getUrl())); info.license(new License().name(license.getName()).url(license.getUrl()));
} }
OpenAPI openAPI = new OpenAPI(); OpenAPI openApi = new OpenAPI();
openAPI.info(info); openApi.info(info);
Components components = properties.getComponents(); Components components = properties.getComponents();
if (null != components) { if (null != components) {
openAPI.components(components); openApi.components(components);
// 鉴权配置 // 鉴权配置
Map<String, SecurityScheme> securitySchemeMap = components.getSecuritySchemes(); Map<String, SecurityScheme> securitySchemeMap = components.getSecuritySchemes();
if (MapUtil.isNotEmpty(securitySchemeMap)) { if (MapUtil.isNotEmpty(securitySchemeMap)) {
SecurityRequirement securityRequirement = new SecurityRequirement(); SecurityRequirement securityRequirement = new SecurityRequirement();
List<String> list = securitySchemeMap.values().stream().map(SecurityScheme::getName).toList(); List<String> list = securitySchemeMap.values().stream().map(SecurityScheme::getName).toList();
list.forEach(securityRequirement::addList); list.forEach(securityRequirement::addList);
openAPI.addSecurityItem(securityRequirement); openApi.addSecurityItem(securityRequirement);
} }
} }
return openAPI; return openApi;
} }
/** /**
* 全局自定义配置全局添加鉴权参数 * 全局自定义配置全局添加鉴权参数
*/ */
@Bean @Bean
@ConditionalOnMissingBean
public GlobalOpenApiCustomizer globalOpenApiCustomizer(SpringDocExtensionProperties properties) { public GlobalOpenApiCustomizer globalOpenApiCustomizer(SpringDocExtensionProperties properties) {
return openApi -> { return openApi -> {
if (null != openApi.getPaths()) { if (null != openApi.getPaths()) {

View File

@@ -14,12 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.apidoc.autoconfigure; package top.continew.starter.apidoc.autoconfigure;
import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.Components;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
/** /**
* API 文档扩展配置属性 * API 文档扩展配置属性

View File

@@ -1 +1 @@
top.charles7c.continew.starter.apidoc.autoconfigure.SpringDocAutoConfiguration top.continew.starter.apidoc.autoconfigure.SpringDocAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-auth</artifactId> <artifactId>continew-starter-auth</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -26,7 +26,7 @@
<!-- 缓存模块 - Redisson --> <!-- 缓存模块 - Redisson -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache-redisson</artifactId> <artifactId>continew-starter-cache-redisson</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.justauth.autoconfigure; package top.continew.starter.auth.justauth.autoconfigure;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import me.zhyd.oauth.cache.AuthStateCache; import me.zhyd.oauth.cache.AuthStateCache;
@@ -25,8 +25,8 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import top.charles7c.continew.starter.auth.justauth.core.JustAuthStateCacheRedisImpl; import top.continew.starter.auth.justauth.core.JustAuthStateCacheRedisImpl;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
/** /**
* JustAuth 自动配置 * JustAuth 自动配置

View File

@@ -14,10 +14,10 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.justauth.core; package top.continew.starter.auth.justauth.core;
import me.zhyd.oauth.cache.AuthStateCache; import me.zhyd.oauth.cache.AuthStateCache;
import top.charles7c.continew.starter.cache.redisson.util.RedisUtils; import top.continew.starter.cache.redisson.util.RedisUtils;
import java.time.Duration; import java.time.Duration;

View File

@@ -1,2 +1,2 @@
top.charles7c.continew.starter.auth.justauth.autoconfigure.JustAuthAutoConfiguration top.continew.starter.auth.justauth.autoconfigure.JustAuthAutoConfiguration
com.xkcoding.justauth.autoconfigure.JustAuthAutoConfiguration com.xkcoding.justauth.autoconfigure.JustAuthAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-auth</artifactId> <artifactId>continew-starter-auth</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -27,14 +27,14 @@
<!-- 缓存模块 - Redisson --> <!-- 缓存模块 - Redisson -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache-redisson</artifactId> <artifactId>continew-starter-cache-redisson</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<!-- Web 模块 --> <!-- Web 模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-web</artifactId> <artifactId>continew-starter-web</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.satoken.autoconfigure; package top.continew.starter.auth.satoken.autoconfigure;
import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.jwt.StpLogicJwtForSimple; import cn.dev33.satoken.jwt.StpLogicJwtForSimple;
@@ -32,10 +32,10 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.*; import org.springframework.context.annotation.*;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import top.charles7c.continew.starter.auth.satoken.autoconfigure.dao.SaTokenDaoConfiguration; import top.continew.starter.auth.satoken.autoconfigure.dao.SaTokenDaoConfiguration;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import top.charles7c.continew.starter.core.constant.StringConstants; import top.continew.starter.core.constant.StringConstants;
import top.charles7c.continew.starter.core.util.GeneralPropertySourceFactory; import top.continew.starter.core.util.GeneralPropertySourceFactory;
/** /**
* Sa-Token 自动配置 * Sa-Token 自动配置
@@ -44,7 +44,7 @@ import top.charles7c.continew.starter.core.util.GeneralPropertySourceFactory;
* @since 1.0.0 * @since 1.0.0
*/ */
@AutoConfiguration @AutoConfiguration
@ComponentScan("top.charles7c.continew.starter.auth.satoken.exception") @ComponentScan("top.continew.starter.auth.satoken.exception")
@EnableConfigurationProperties(SaTokenExtensionProperties.class) @EnableConfigurationProperties(SaTokenExtensionProperties.class)
@ConditionalOnProperty(prefix = "sa-token.extension", name = PropertiesConstants.ENABLED, havingValue = "true") @ConditionalOnProperty(prefix = "sa-token.extension", name = PropertiesConstants.ENABLED, havingValue = "true")
@PropertySource(value = "classpath:default-auth-satoken.yml", factory = GeneralPropertySourceFactory.class) @PropertySource(value = "classpath:default-auth-satoken.yml", factory = GeneralPropertySourceFactory.class)

View File

@@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.satoken.autoconfigure; package top.continew.starter.auth.satoken.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
import top.charles7c.continew.starter.auth.satoken.autoconfigure.dao.SaTokenDaoProperties; import top.continew.starter.auth.satoken.autoconfigure.dao.SaTokenDaoProperties;
/** /**
* SaToken 扩展配置属性 * SaToken 扩展配置属性

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.satoken.autoconfigure; package top.continew.starter.auth.satoken.autoconfigure;
/** /**
* SaToken 安全配置属性 * SaToken 安全配置属性

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.satoken.autoconfigure.dao; package top.continew.starter.auth.satoken.autoconfigure.dao;
import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.dao.SaTokenDaoDefaultImpl; import cn.dev33.satoken.dao.SaTokenDaoDefaultImpl;
@@ -28,7 +28,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.core.ResolvableType; import org.springframework.core.ResolvableType;
import top.charles7c.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration; import top.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration;
/** /**
* SaToken 持久层配置 * SaToken 持久层配置

View File

@@ -14,9 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.satoken.autoconfigure.dao; package top.continew.starter.auth.satoken.autoconfigure.dao;
import top.charles7c.continew.starter.auth.satoken.enums.SaTokenDaoType; import top.continew.starter.auth.satoken.enums.SaTokenDaoType;
/** /**
* SaToken 持久层配置属性 * SaToken 持久层配置属性

View File

@@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.satoken.autoconfigure.dao; package top.continew.starter.auth.satoken.autoconfigure.dao;
import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.util.SaFoxUtil; import cn.dev33.satoken.util.SaFoxUtil;
import top.charles7c.continew.starter.cache.redisson.util.RedisUtils; import top.continew.starter.cache.redisson.util.RedisUtils;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
@@ -140,7 +140,7 @@ public class SaTokenDaoRedisImpl implements SaTokenDao {
@Override @Override
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) { public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
Collection<String> keys = RedisUtils.keys(String.format("%s*%s*", prefix, keyword)); Collection<String> keys = RedisUtils.keys("%s*%s*".formatted(prefix, keyword));
List<String> list = new ArrayList<>(keys); List<String> list = new ArrayList<>(keys);
return SaFoxUtil.searchList(list, start, size, sortType); return SaFoxUtil.searchList(list, start, size, sortType);
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.satoken.enums; package top.continew.starter.auth.satoken.enums;
/** /**
* SaToken 持久层类型枚举 * SaToken 持久层类型枚举

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.auth.satoken.exception; package top.continew.starter.auth.satoken.exception;
import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException; import cn.dev33.satoken.exception.NotPermissionException;
@@ -25,7 +25,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
import top.charles7c.continew.starter.web.model.R; import top.continew.starter.web.model.R;
/** /**
* 全局 SaToken 异常处理器 * 全局 SaToken 异常处理器

View File

@@ -1 +1 @@
top.charles7c.continew.starter.auth.satoken.autoconfigure.SaTokenAutoConfiguration top.continew.starter.auth.satoken.autoconfigure.SaTokenAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter</artifactId> <artifactId>continew-starter</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -21,7 +21,7 @@
<dependencies> <dependencies>
<!-- 核心模块 --> <!-- 核心模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-core</artifactId> <artifactId>continew-starter-core</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache</artifactId> <artifactId>continew-starter-cache</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -38,7 +38,7 @@
<!-- 缓存模块 - Redisson --> <!-- 缓存模块 - Redisson -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache-redisson</artifactId> <artifactId>continew-starter-cache-redisson</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.cache.jetcache.autoconfigure; package top.continew.starter.cache.jetcache.autoconfigure;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -22,7 +22,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySource;
import top.charles7c.continew.starter.core.util.GeneralPropertySourceFactory; import top.continew.starter.core.util.GeneralPropertySourceFactory;
/** /**
* JetCache 自动配置 * JetCache 自动配置

View File

@@ -1 +1 @@
top.charles7c.continew.starter.cache.jetcache.autoconfigure.JetCacheAutoConfiguration top.continew.starter.cache.jetcache.autoconfigure.JetCacheAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache</artifactId> <artifactId>continew-starter-cache</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.cache.redisson.autoconfigure; package top.continew.starter.cache.redisson.autoconfigure;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
@@ -33,8 +33,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import top.charles7c.continew.starter.core.constant.StringConstants; import top.continew.starter.core.constant.StringConstants;
import java.util.List; import java.util.List;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.cache.redisson.autoconfigure; package top.continew.starter.cache.redisson.autoconfigure;
import org.redisson.config.ClusterServersConfig; import org.redisson.config.ClusterServersConfig;
import org.redisson.config.SentinelServersConfig; import org.redisson.config.SentinelServersConfig;

View File

@@ -14,12 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.cache.redisson.util; package top.continew.starter.cache.redisson.util;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import org.redisson.api.*; import org.redisson.api.*;
import org.redisson.config.Config; import top.continew.starter.core.constant.StringConstants;
import top.charles7c.continew.starter.core.constant.StringConstants;
import java.time.Duration; import java.time.Duration;
import java.util.Collection; import java.util.Collection;
@@ -44,7 +43,7 @@ public class RedisUtils {
* @param key * @param key
* @param value * @param value
*/ */
public static <T> void set(final String key, final T value) { public static <T> void set(String key, T value) {
CLIENT.getBucket(key).set(value); CLIENT.getBucket(key).set(value);
} }
@@ -55,7 +54,7 @@ public class RedisUtils {
* @param value * @param value
* @param duration 过期时间 * @param duration 过期时间
*/ */
public static <T> void set(final String key, final T value, final Duration duration) { public static <T> void set(String key, T value, Duration duration) {
RBatch batch = CLIENT.createBatch(); RBatch batch = CLIENT.createBatch();
RBucketAsync<T> bucket = batch.getBucket(key); RBucketAsync<T> bucket = batch.getBucket(key);
bucket.setAsync(value); bucket.setAsync(value);
@@ -69,7 +68,7 @@ public class RedisUtils {
* @param key * @param key
* @return * @return
*/ */
public static <T> T get(final String key) { public static <T> T get(String key) {
RBucket<T> bucket = CLIENT.getBucket(key); RBucket<T> bucket = CLIENT.getBucket(key);
return bucket.get(); return bucket.get();
} }
@@ -80,10 +79,19 @@ public class RedisUtils {
* @param key * @param key
* @return true设置成功false设置失败 * @return true设置成功false设置失败
*/ */
public static boolean delete(final String key) { public static boolean delete(String key) {
return CLIENT.getBucket(key).delete(); return CLIENT.getBucket(key).delete();
} }
/**
* 删除缓存
*
* @param pattern 键模式
*/
public static void deleteByPattern(String pattern) {
CLIENT.getKeys().deleteByPattern(pattern);
}
/** /**
* 设置缓存过期时间 * 设置缓存过期时间
* *
@@ -91,7 +99,7 @@ public class RedisUtils {
* @param timeout 过期时间单位 * @param timeout 过期时间单位
* @return true设置成功false设置失败 * @return true设置成功false设置失败
*/ */
public static boolean expire(final String key, final long timeout) { public static boolean expire(String key, long timeout) {
return expire(key, Duration.ofSeconds(timeout)); return expire(key, Duration.ofSeconds(timeout));
} }
@@ -102,7 +110,7 @@ public class RedisUtils {
* @param duration 过期时间 * @param duration 过期时间
* @return true设置成功false设置失败 * @return true设置成功false设置失败
*/ */
public static boolean expire(final String key, final Duration duration) { public static boolean expire(String key, Duration duration) {
return CLIENT.getBucket(key).expire(duration); return CLIENT.getBucket(key).expire(duration);
} }
@@ -112,7 +120,7 @@ public class RedisUtils {
* @param key * @param key
* @return 缓存剩余过期时间单位毫秒 * @return 缓存剩余过期时间单位毫秒
*/ */
public static long getTimeToLive(final String key) { public static long getTimeToLive(String key) {
return CLIENT.getBucket(key).remainTimeToLive(); return CLIENT.getBucket(key).remainTimeToLive();
} }
@@ -124,18 +132,18 @@ public class RedisUtils {
*/ */
public static boolean hasKey(String key) { public static boolean hasKey(String key) {
RKeys keys = CLIENT.getKeys(); RKeys keys = CLIENT.getKeys();
return keys.countExists(getNameMapper().map(key)) > 0; return keys.countExists(key) > 0;
} }
/** /**
* 查询缓存列表 * 查询缓存列表
* *
* @param keyPattern 表达 * @param pattern
* @return 缓存列表 * @return 缓存列表
*/ */
public static Collection<String> keys(final String keyPattern) { public static Collection<String> keys(String pattern) {
Stream<String> stream = CLIENT.getKeys().getKeysStreamByPattern(getNameMapper().map(keyPattern)); Stream<String> stream = CLIENT.getKeys().getKeysStreamByPattern(pattern);
return stream.map(key -> getNameMapper().unmap(key)).toList(); return stream.toList();
} }
/** /**
@@ -162,21 +170,4 @@ public class RedisUtils {
public static String formatKey(String... subKeys) { public static String formatKey(String... subKeys) {
return String.join(StringConstants.COLON, subKeys); return String.join(StringConstants.COLON, subKeys);
} }
/**
* 根据 Redisson 配置获取名称映射器
*
* @return 名称映射器
*/
private static NameMapper getNameMapper() {
Config config = CLIENT.getConfig();
if (config.isClusterConfig()) {
return config.useClusterServers().getNameMapper();
}
if (config.isSentinelConfig()) {
return config.useSentinelServers().getNameMapper();
}
return config.useSingleServer().getNameMapper();
}
} }

View File

@@ -1 +1 @@
top.charles7c.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration top.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache</artifactId> <artifactId>continew-starter-cache</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -15,7 +15,7 @@
<dependencies> <dependencies>
<!-- 缓存模块 - Redisson --> <!-- 缓存模块 - Redisson -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache-redisson</artifactId> <artifactId>continew-starter-cache-redisson</artifactId>
</dependency> </dependency>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.cache.springcache.autoconfigure; package top.continew.starter.cache.springcache.autoconfigure;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
@@ -35,7 +35,7 @@ import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer;
import top.charles7c.continew.starter.core.util.GeneralPropertySourceFactory; import top.continew.starter.core.util.GeneralPropertySourceFactory;
import java.util.Map; import java.util.Map;
@@ -97,7 +97,7 @@ public class SpringCacheAutoConfiguration implements CachingConfigurer {
for (int i = 0; i < params.length; i++) { for (int i = 0; i < params.length; i++) {
paramMap.put(String.valueOf(i), params[i]); paramMap.put(String.valueOf(i), params[i]);
} }
return String.format("%s:%s", key, DigestUtil.sha256Hex(JSONUtil.toJsonStr(paramMap))); return "%s:%s".formatted(key, DigestUtil.sha256Hex(JSONUtil.toJsonStr(paramMap)));
}; };
} }

View File

@@ -1 +1 @@
top.charles7c.continew.starter.cache.springcache.autoconfigure.SpringCacheAutoConfiguration top.continew.starter.cache.springcache.autoconfigure.SpringCacheAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter</artifactId> <artifactId>continew-starter</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -22,7 +22,7 @@
<dependencies> <dependencies>
<!-- 核心模块 --> <!-- 核心模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-core</artifactId> <artifactId>continew-starter-core</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-captcha</artifactId> <artifactId>continew-starter-captcha</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -21,7 +21,7 @@
<!-- 缓存模块 - Redisson --> <!-- 缓存模块 - Redisson -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache-redisson</artifactId> <artifactId>continew-starter-cache-redisson</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.behavior.autoconfigure; package top.continew.starter.captcha.behavior.autoconfigure;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
@@ -36,8 +36,8 @@ import org.springframework.context.annotation.Import;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver;
import top.charles7c.continew.starter.captcha.behavior.autoconfigure.cache.BehaviorCaptchaCacheConfiguration; import top.continew.starter.captcha.behavior.autoconfigure.cache.BehaviorCaptchaCacheConfiguration;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;

View File

@@ -14,12 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.behavior.autoconfigure; package top.continew.starter.captcha.behavior.autoconfigure;
import com.anji.captcha.model.common.CaptchaTypeEnum; import com.anji.captcha.model.common.CaptchaTypeEnum;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import top.charles7c.continew.starter.captcha.behavior.enums.StorageType; import top.continew.starter.captcha.behavior.enums.StorageType;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import java.awt.*; import java.awt.*;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.behavior.autoconfigure.cache; package top.continew.starter.captcha.behavior.autoconfigure.cache;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.anji.captcha.service.CaptchaCacheService; import com.anji.captcha.service.CaptchaCacheService;
@@ -31,9 +31,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.core.ResolvableType; import org.springframework.core.ResolvableType;
import top.charles7c.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration; import top.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration;
import top.charles7c.continew.starter.captcha.behavior.enums.StorageType; import top.continew.starter.captcha.behavior.enums.StorageType;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
/** /**
* 行为验证码缓存配置 * 行为验证码缓存配置

View File

@@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.behavior.autoconfigure.cache; package top.continew.starter.captcha.behavior.autoconfigure.cache;
import com.anji.captcha.service.CaptchaCacheService; import com.anji.captcha.service.CaptchaCacheService;
import top.charles7c.continew.starter.cache.redisson.util.RedisUtils; import top.continew.starter.cache.redisson.util.RedisUtils;
import top.charles7c.continew.starter.captcha.behavior.enums.StorageType; import top.continew.starter.captcha.behavior.enums.StorageType;
import java.time.Duration; import java.time.Duration;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.behavior.enums; package top.continew.starter.captcha.behavior.enums;
/** /**
* 缓存类型枚举 * 缓存类型枚举

View File

@@ -1 +1 @@
top.charles7c.continew.starter.captcha.behavior.autoconfigure.BehaviorCaptchaAutoConfiguration top.continew.starter.captcha.behavior.autoconfigure.BehaviorCaptchaAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-captcha</artifactId> <artifactId>continew-starter-captcha</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.graphic.autoconfigure; package top.continew.starter.captcha.graphic.autoconfigure;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -24,8 +24,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import top.charles7c.continew.starter.captcha.graphic.core.GraphicCaptchaService; import top.continew.starter.captcha.graphic.core.GraphicCaptchaService;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
/** /**
* 图形验证码自动配置 * 图形验证码自动配置

View File

@@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.graphic.autoconfigure; package top.continew.starter.captcha.graphic.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import top.charles7c.continew.starter.captcha.graphic.enums.GraphicCaptchaType; import top.continew.starter.captcha.graphic.enums.GraphicCaptchaType;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
/** /**
* 图形验证码配置属性 * 图形验证码配置属性

View File

@@ -14,12 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.graphic.core; package top.continew.starter.captcha.graphic.core;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import com.wf.captcha.base.Captcha; import com.wf.captcha.base.Captcha;
import top.charles7c.continew.starter.captcha.graphic.autoconfigure.GraphicCaptchaProperties; import top.continew.starter.captcha.graphic.autoconfigure.GraphicCaptchaProperties;
import java.awt.*; import java.awt.*;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.captcha.graphic.enums; package top.continew.starter.captcha.graphic.enums;
import com.wf.captcha.*; import com.wf.captcha.*;
import com.wf.captcha.base.Captcha; import com.wf.captcha.base.Captcha;

View File

@@ -1 +1 @@
top.charles7c.continew.starter.captcha.graphic.autoconfigure.GraphicCaptchaAutoConfiguration top.continew.starter.captcha.graphic.autoconfigure.GraphicCaptchaAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter</artifactId> <artifactId>continew-starter</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -21,7 +21,7 @@
<dependencies> <dependencies>
<!-- 核心模块 --> <!-- 核心模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-core</artifactId> <artifactId>continew-starter-core</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter</artifactId> <artifactId>continew-starter</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -52,11 +52,5 @@
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId> <artifactId>hutool-http</artifactId>
</dependency> </dependency>
<!-- Hutool 数据库模块(在 JDBC 基础上封装的数据库操作工具类,通过包装,使用 ActiveRecord 思想操作数据库) -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-db</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.autoconfigure.project; package top.continew.starter.core.autoconfigure.project;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.autoconfigure.project; package top.continew.starter.core.autoconfigure.project;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.autoconfigure.threadpool; package top.continew.starter.core.autoconfigure.threadpool;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -25,8 +25,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import top.charles7c.continew.starter.core.exception.BaseException; import top.continew.starter.core.exception.BaseException;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;

View File

@@ -14,12 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.autoconfigure.threadpool; package top.continew.starter.core.autoconfigure.threadpool;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -27,12 +28,16 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import top.charles7c.continew.starter.core.util.ExceptionUtils; import top.continew.starter.core.util.ExceptionUtils;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.RunnableFuture;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* 线程池自动配置 * 线程池自动配置
@@ -69,6 +74,10 @@ public class ThreadPoolAutoConfiguration {
executor.setKeepAliveSeconds(properties.getKeepAliveSeconds()); executor.setKeepAliveSeconds(properties.getKeepAliveSeconds());
// 配置当池内线程数已达到上限的时候该如何处理新任务不在新线程中执行任务而是由调用者所在的线程来执行 // 配置当池内线程数已达到上限的时候该如何处理新任务不在新线程中执行任务而是由调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 关闭线程池是否等待任务完成
executor.setWaitForTasksToCompleteOnShutdown(properties.isWaitForTasksToCompleteOnShutdown());
// 执行器在关闭时阻塞的最长毫秒数以等待剩余任务完成执行
executor.setAwaitTerminationMillis(properties.getAwaitTerminationMillis());
log.debug("[ContiNew Starter] - Auto Configuration 'ThreadPoolTaskExecutor' completed initialization."); log.debug("[ContiNew Starter] - Auto Configuration 'ThreadPoolTaskExecutor' completed initialization.");
return executor; return executor;
} }
@@ -88,7 +97,62 @@ public class ThreadPoolAutoConfiguration {
ExceptionUtils.printException(runnable, throwable); ExceptionUtils.printException(runnable, throwable);
} }
}; };
// 应用关闭时关闭线程池
SpringApplication.getShutdownHandlers().add(() -> shutdown(executor, properties));
log.debug("[ContiNew Starter] - Auto Configuration 'ScheduledExecutorService' completed initialization."); log.debug("[ContiNew Starter] - Auto Configuration 'ScheduledExecutorService' completed initialization.");
return executor; return executor;
} }
/**
* 根据相应的配置设置关闭 ExecutorService
*
* @see org.springframework.scheduling.concurrent.ExecutorConfigurationSupport#shutdown()
*/
public void shutdown(ExecutorService executor, ThreadPoolProperties properties) {
log.debug("[ContiNew Starter] - Shutting down ScheduledExecutorService start.");
if (executor != null) {
if (properties.isWaitForTasksToCompleteOnShutdown()) {
executor.shutdown();
} else {
for (Runnable remainingTask : executor.shutdownNow()) {
cancelRemainingTask(remainingTask);
}
}
awaitTerminationIfNecessary(executor, properties);
log.debug("[ContiNew Starter] - Shutting down ScheduledExecutorService complete.");
}
}
/**
* Cancel the given remaining task which never commenced execution,
* as returned from {@link ExecutorService#shutdownNow()}.
*
* @param task the task to cancel (typically a {@link RunnableFuture})
* @see RunnableFuture#cancel(boolean)
*/
protected void cancelRemainingTask(Runnable task) {
if (task instanceof Future<?> future) {
future.cancel(true);
}
}
/**
* Wait for the executor to terminate, according to the value of the properties
*/
private void awaitTerminationIfNecessary(ExecutorService executor, ThreadPoolProperties properties) {
if (properties.getAwaitTerminationMillis() > 0) {
try {
if (!executor.awaitTermination(properties.getAwaitTerminationMillis(), TimeUnit.MILLISECONDS)) {
if (log.isWarnEnabled()) {
log.warn("[ContiNew Starter] - Timed out while waiting for executor 'ScheduledExecutorService' to terminate.");
}
}
} catch (InterruptedException ex) {
if (log.isWarnEnabled()) {
log.warn("[ContiNew Starter] - Interrupted while waiting for executor 'ScheduledExecutorService' to terminate");
}
Thread.currentThread().interrupt();
}
}
}
} }

View File

@@ -14,10 +14,10 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.autoconfigure.threadpool; package top.continew.starter.core.autoconfigure.threadpool;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
/** /**
* 线程池配置属性 * 线程池配置属性
@@ -54,6 +54,16 @@ public class ThreadPoolProperties {
*/ */
private int keepAliveSeconds = 300; private int keepAliveSeconds = 300;
/**
* 关闭线程池是否等待任务完成
*/
private boolean waitForTasksToCompleteOnShutdown = false;
/**
* 执行器在关闭时阻塞的最长毫秒数以等待剩余任务完成执行
*/
private long awaitTerminationMillis = 0;
public boolean isEnabled() { public boolean isEnabled() {
return enabled; return enabled;
} }
@@ -93,4 +103,20 @@ public class ThreadPoolProperties {
public void setKeepAliveSeconds(int keepAliveSeconds) { public void setKeepAliveSeconds(int keepAliveSeconds) {
this.keepAliveSeconds = keepAliveSeconds; this.keepAliveSeconds = keepAliveSeconds;
} }
public boolean isWaitForTasksToCompleteOnShutdown() {
return waitForTasksToCompleteOnShutdown;
}
public void setWaitForTasksToCompleteOnShutdown(boolean waitForTasksToCompleteOnShutdown) {
this.waitForTasksToCompleteOnShutdown = waitForTasksToCompleteOnShutdown;
}
public long getAwaitTerminationMillis() {
return awaitTerminationMillis;
}
public void setAwaitTerminationMillis(long awaitTerminationMillis) {
this.awaitTerminationMillis = awaitTerminationMillis;
}
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.constant; package top.continew.starter.core.constant;
/** /**
* 配置属性相关常量 * 配置属性相关常量
@@ -37,7 +37,7 @@ public class PropertiesConstants {
/** /**
* 线程池配置 * 线程池配置
*/ */
public static final String THREAD_POOL = CONTINEW_STARTER + ".thread-pool"; public static final String THREAD_POOL = CONTINEW_STARTER + StringConstants.DOT + "thread-pool";
/** /**
* Spring Doc 配置 * Spring Doc 配置
@@ -47,7 +47,7 @@ public class PropertiesConstants {
/** /**
* Spring Doc Swagger UI 配置 * Spring Doc Swagger UI 配置
*/ */
public static final String SPRINGDOC_SWAGGER_UI = SPRINGDOC + ".swagger-ui"; public static final String SPRINGDOC_SWAGGER_UI = SPRINGDOC + StringConstants.DOT + "swagger-ui";
/** /**
* 安全配置 * 安全配置
@@ -67,47 +67,52 @@ public class PropertiesConstants {
/** /**
* Web 配置 * Web 配置
*/ */
public static final String WEB = CONTINEW_STARTER + ".web"; public static final String WEB = CONTINEW_STARTER + StringConstants.DOT + "web";
/** /**
* 跨域配置 * 跨域配置
*/ */
public static final String CORS = WEB + ".cors"; public static final String CORS = WEB + StringConstants.DOT + "cors";
/** /**
* 链路配置 * 链路配置
*/ */
public static final String TRACE = WEB + ".trace"; public static final String TRACE = WEB + StringConstants.DOT + "trace";
/**
* XSS 配置
*/
public static final String XSS = WEB + StringConstants.DOT + "xss";
/** /**
* 日志配置 * 日志配置
*/ */
public static final String LOG = CONTINEW_STARTER + ".log"; public static final String LOG = CONTINEW_STARTER + StringConstants.DOT + "log";
/** /**
* 存储配置 * 存储配置
*/ */
public static final String STORAGE = CONTINEW_STARTER + ".storage"; public static final String STORAGE = CONTINEW_STARTER + StringConstants.DOT + "storage";
/** /**
* 本地存储配置 * 本地存储配置
*/ */
public static final String STORAGE_LOCAL = STORAGE + ".local"; public static final String STORAGE_LOCAL = STORAGE + StringConstants.DOT + "local";
/** /**
* 验证码配置 * 验证码配置
*/ */
public static final String CAPTCHA = CONTINEW_STARTER + ".captcha"; public static final String CAPTCHA = CONTINEW_STARTER + StringConstants.DOT + "captcha";
/** /**
* 图形验证码配置 * 图形验证码配置
*/ */
public static final String CAPTCHA_GRAPHIC = CAPTCHA + ".graphic"; public static final String CAPTCHA_GRAPHIC = CAPTCHA + StringConstants.DOT + "graphic";
/** /**
* 行为验证码配置 * 行为验证码配置
*/ */
public static final String CAPTCHA_BEHAVIOR = CAPTCHA + ".behavior"; public static final String CAPTCHA_BEHAVIOR = CAPTCHA + StringConstants.DOT + "behavior";
private PropertiesConstants() { private PropertiesConstants() {
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.constant; package top.continew.starter.core.constant;
import cn.hutool.core.text.CharPool; import cn.hutool.core.text.CharPool;
import cn.hutool.core.text.StrPool; import cn.hutool.core.text.StrPool;

View File

@@ -14,7 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.exception; package top.continew.starter.core.exception;
import java.io.Serial;
/** /**
* 自定义验证异常-错误请求 * 自定义验证异常-错误请求
@@ -24,10 +26,21 @@ package top.charles7c.continew.starter.core.exception;
*/ */
public class BadRequestException extends BaseException { public class BadRequestException extends BaseException {
@Serial
private static final long serialVersionUID = 1L;
public BadRequestException() { public BadRequestException() {
} }
public BadRequestException(String message) { public BadRequestException(String message) {
super(message); super(message);
} }
public BadRequestException(Throwable cause) {
super(cause);
}
public BadRequestException(String message, Throwable cause) {
super(message, cause);
}
} }

View File

@@ -14,7 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.exception; package top.continew.starter.core.exception;
import java.io.Serial;
/** /**
* 自定义异常基类 * 自定义异常基类
@@ -24,10 +26,21 @@ package top.charles7c.continew.starter.core.exception;
*/ */
public class BaseException extends RuntimeException { public class BaseException extends RuntimeException {
@Serial
private static final long serialVersionUID = 1L;
public BaseException() { public BaseException() {
} }
public BaseException(String message) { public BaseException(String message) {
super(message); super(message);
} }
public BaseException(Throwable cause) {
super(cause);
}
public BaseException(String message, Throwable cause) {
super(message, cause);
}
} }

View File

@@ -14,7 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.exception; package top.continew.starter.core.exception;
import java.io.Serial;
/** /**
* 业务异常 * 业务异常
@@ -24,10 +26,21 @@ package top.charles7c.continew.starter.core.exception;
*/ */
public class BusinessException extends BaseException { public class BusinessException extends BaseException {
@Serial
private static final long serialVersionUID = 1L;
public BusinessException() { public BusinessException() {
} }
public BusinessException(String message) { public BusinessException(String message) {
super(message); super(message);
} }
public BusinessException(Throwable cause) {
super(cause);
}
public BusinessException(String message, Throwable cause) {
super(message, cause);
}
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util; package top.continew.starter.core.util;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.TypeUtil; import cn.hutool.core.util.TypeUtil;

View File

@@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util; package top.continew.starter.core.util;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import top.charles7c.continew.starter.core.constant.StringConstants; import top.continew.starter.core.constant.StringConstants;
import java.util.concurrent.CancellationException; import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util; package top.continew.starter.core.util;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import org.springframework.boot.env.YamlPropertySourceLoader; import org.springframework.boot.env.YamlPropertySourceLoader;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util; package top.continew.starter.core.util;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.net.NetUtil; import cn.hutool.core.net.NetUtil;
@@ -23,7 +23,7 @@ import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.http.HtmlUtil; import cn.hutool.http.HtmlUtil;
import net.dreamlu.mica.ip2region.core.Ip2regionSearcher; import net.dreamlu.mica.ip2region.core.Ip2regionSearcher;
import net.dreamlu.mica.ip2region.core.IpInfo; import net.dreamlu.mica.ip2region.core.IpInfo;
import top.charles7c.continew.starter.core.constant.StringConstants; import top.continew.starter.core.constant.StringConstants;
import java.util.Set; import java.util.Set;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util; package top.continew.starter.core.util;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util; package top.continew.starter.core.util;
import cn.hutool.extra.template.Template; import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateConfig;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util; package top.continew.starter.core.util;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;

View File

@@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util.validate; package top.continew.starter.core.util.validate;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import top.charles7c.continew.starter.core.constant.StringConstants; import top.continew.starter.core.constant.StringConstants;
import top.charles7c.continew.starter.core.exception.BusinessException; import top.continew.starter.core.exception.BusinessException;
import java.util.function.BooleanSupplier; import java.util.function.BooleanSupplier;
@@ -45,7 +45,7 @@ public class CheckUtils extends Validator {
* @param fieldValue 字段值 * @param fieldValue 字段值
*/ */
public static void throwIfNotExists(Object obj, String entityName, String fieldName, Object fieldValue) { public static void throwIfNotExists(Object obj, String entityName, String fieldName, Object fieldValue) {
String message = String.format("%s 为 [%s] 的 %s 记录已不存在", fieldName, fieldValue, CharSequenceUtil String message = "%s 为 [%s] 的 %s 记录已不存在".formatted(fieldName, fieldValue, CharSequenceUtil
.replace(entityName, "DO", StringConstants.EMPTY)); .replace(entityName, "DO", StringConstants.EMPTY));
throwIfNull(obj, message, EXCEPTION_TYPE); throwIfNull(obj, message, EXCEPTION_TYPE);
} }
@@ -81,7 +81,7 @@ public class CheckUtils extends Validator {
* @param fieldValue 字段值 * @param fieldValue 字段值
*/ */
public static void throwIfExists(Object obj, String entityName, String fieldName, Object fieldValue) { public static void throwIfExists(Object obj, String entityName, String fieldName, Object fieldValue) {
String message = String.format("%s 为 [%s] 的 %s 记录已存在", fieldName, fieldValue, entityName); String message = "%s 为 [%s] 的 %s 记录已存在".formatted(fieldName, fieldValue, entityName);
throwIfNotNull(obj, message, EXCEPTION_TYPE); throwIfNotNull(obj, message, EXCEPTION_TYPE);
} }

View File

@@ -14,10 +14,10 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util.validate; package top.continew.starter.core.util.validate;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import top.charles7c.continew.starter.core.exception.BadRequestException; import top.continew.starter.core.exception.BadRequestException;
import java.util.function.BooleanSupplier; import java.util.function.BooleanSupplier;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util.validate; package top.continew.starter.core.util.validate;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;

View File

@@ -1,3 +1,3 @@
top.charles7c.continew.starter.core.autoconfigure.project.ProjectAutoConfiguration top.continew.starter.core.autoconfigure.project.ProjectAutoConfiguration
top.charles7c.continew.starter.core.autoconfigure.threadpool.ThreadPoolAutoConfiguration top.continew.starter.core.autoconfigure.threadpool.ThreadPoolAutoConfiguration
top.charles7c.continew.starter.core.autoconfigure.threadpool.AsyncAutoConfiguration top.continew.starter.core.autoconfigure.threadpool.AsyncAutoConfiguration

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>top.continew</groupId>
<artifactId>continew-starter-data</artifactId>
<version>${revision}</version>
</parent>
<artifactId>continew-starter-data-core</artifactId>
<description>ContiNew Starter 数据访问模块 - 核心模块</description>
<dependencies>
<!-- Hutool 数据库模块(在 JDBC 基础上封装的数据库操作工具类,通过包装,使用 ActiveRecord 思想操作数据库) -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-db</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -14,7 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.query; package top.continew.starter.data.core.annotation;
import top.continew.starter.data.core.enums.QueryType;
import java.lang.annotation.*; import java.lang.annotation.*;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.query; package top.continew.starter.data.core.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;

View File

@@ -0,0 +1,74 @@
/*
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package top.continew.starter.data.core.enums;
import top.continew.starter.data.core.function.ISqlFunction;
import java.io.Serializable;
/**
* 数据库类型枚举
*
* @author Charles7c
* @since 1.4.1
*/
public enum DatabaseType implements ISqlFunction {
/**
* MySQL
*/
MYSQL("MySQL") {
@Override
public String findInSet(Serializable value, String set) {
return "find_in_set('%s', %s) <> 0".formatted(value, set);
}
},
/**
* PostgreSQL
*/
POSTGRE_SQL("PostgreSQL") {
@Override
public String findInSet(Serializable value, String set) {
return "(select position(',%s,' in ','||%s||',')) <> 0".formatted(value, set);
}
},;
private final String database;
DatabaseType(String database) {
this.database = database;
}
/**
* 获取数据库类型
*
* @param database 数据库
*/
public static DatabaseType get(String database) {
for (DatabaseType databaseType : DatabaseType.values()) {
if (databaseType.database.equalsIgnoreCase(database)) {
return databaseType;
}
}
return null;
}
public String getDatabase() {
return database;
}
}

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.query; package top.continew.starter.data.core.enums;
/** /**
* 查询类型枚举 * 查询类型枚举
@@ -25,72 +25,72 @@ package top.charles7c.continew.starter.data.mybatis.plus.query;
public enum QueryType { public enum QueryType {
/** /**
* 等于 =例如WHERE `age` = 18 * 等于 =例如WHERE age = 18
*/ */
EQ, EQ,
/** /**
* 不等于 !=例如WHERE `age` != 18 * 不等于 !=例如WHERE age != 18
*/ */
NE, NE,
/** /**
* 大于 >例如WHERE `age` > 18 * 大于 >例如WHERE age > 18
*/ */
GT, GT,
/** /**
* 大于等于 >= 例如WHERE `age` >= 18 * 大于等于 >= 例如WHERE age >= 18
*/ */
GE, GE,
/** /**
* 小于 <例如WHERE `age` < 18 * 小于 <例如WHERE age < 18
*/ */
LT, LT,
/** /**
* 小于等于 <=例如WHERE `age` <= 18 * 小于等于 <=例如WHERE age <= 18
*/ */
LE, LE,
/** /**
* 范围查询例如WHERE `age` BETWEEN 10 AND 18 * 范围查询例如WHERE age BETWEEN 10 AND 18
*/ */
BETWEEN, BETWEEN,
/** /**
* LIKE '%%'例如WHERE `nickname` LIKE '%s%' * LIKE '%%'例如WHERE nickname LIKE '%s%'
*/ */
LIKE, LIKE,
/** /**
* LIKE '%'例如WHERE `nickname` LIKE '%s' * LIKE '%'例如WHERE nickname LIKE '%s'
*/ */
LIKE_LEFT, LIKE_LEFT,
/** /**
* LIKE '%'例如WHERE `nickname` LIKE 's%' * LIKE '%'例如WHERE nickname LIKE 's%'
*/ */
LIKE_RIGHT, LIKE_RIGHT,
/** /**
* 包含查询例如WHERE `age` IN (10, 20, 30) * 包含查询例如WHERE age IN (10, 20, 30)
*/ */
IN, IN,
/** /**
* 不包含查询例如WHERE `age` NOT IN (20, 30) * 不包含查询例如WHERE age NOT IN (20, 30)
*/ */
NOT_IN, NOT_IN,
/** /**
* 空查询例如WHERE `email` IS NULL * 空查询例如WHERE email IS NULL
*/ */
IS_NULL, IS_NULL,
/** /**
* 非空查询例如WHERE `email` IS NOT NULL * 非空查询例如WHERE email IS NOT NULL
*/ */
IS_NOT_NULL,; IS_NOT_NULL,;
} }

View File

@@ -0,0 +1,37 @@
/*
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package top.continew.starter.data.core.function;
import java.io.Serializable;
/**
* SQL 函数接口
*
* @author Charles7c
* @since 1.4.1
*/
public interface ISqlFunction {
/**
* find_in_set 函数
*
* @param value 值
* @param set 集合
* @return 函数实现
*/
String findInSet(Serializable value, String set);
}

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util.db; package top.continew.starter.data.core.util;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
@@ -22,8 +22,12 @@ import cn.hutool.db.Db;
import cn.hutool.db.Entity; import cn.hutool.db.Entity;
import cn.hutool.db.meta.Column; import cn.hutool.db.meta.Column;
import cn.hutool.db.meta.MetaUtil; import cn.hutool.db.meta.MetaUtil;
import top.continew.starter.core.exception.BusinessException;
import top.continew.starter.data.core.enums.DatabaseType;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@@ -40,6 +44,36 @@ public class MetaUtils {
private MetaUtils() { private MetaUtils() {
} }
/**
* 获取数据库类型如果获取不到数据库类型则返回默认数据库类型
*
* @param dataSource 数据源
* @param defaultValue 默认数据库类型
* @return 数据库类型
* @since 1.4.1
*/
public static DatabaseType getDatabaseTypeOrDefault(DataSource dataSource, DatabaseType defaultValue) {
DatabaseType databaseType = getDatabaseType(dataSource);
return null == databaseType ? defaultValue : databaseType;
}
/**
* 获取数据库类型
*
* @param dataSource 数据源
* @return 数据库类型
* @since 1.4.1
*/
public static DatabaseType getDatabaseType(DataSource dataSource) {
try (Connection conn = dataSource.getConnection()) {
DatabaseMetaData metaData = conn.getMetaData();
String databaseProductName = metaData.getDatabaseProductName();
return DatabaseType.get(databaseProductName);
} catch (SQLException e) {
throw new BusinessException(e);
}
}
/** /**
* 获取所有表信息 * 获取所有表信息
* *
@@ -62,7 +96,7 @@ public class MetaUtils {
List<Entity> tableEntityList; List<Entity> tableEntityList;
Db db = Db.use(dataSource); Db db = Db.use(dataSource);
if (CharSequenceUtil.isNotBlank(tableName)) { if (CharSequenceUtil.isNotBlank(tableName)) {
tableEntityList = db.query(String.format("%s WHERE NAME = ?", querySql), tableName); tableEntityList = db.query("%s WHERE NAME = ?".formatted(querySql), tableName);
} else { } else {
tableEntityList = db.query(querySql); tableEntityList = db.query(querySql);
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.core.util.db; package top.continew.starter.data.core.util;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-data</artifactId> <artifactId>continew-starter-data</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -31,6 +31,12 @@
<artifactId>p6spy</artifactId> <artifactId>p6spy</artifactId>
</dependency> </dependency>
<!-- 数据访问模块 - 核心模块 -->
<dependency>
<groupId>top.continew</groupId>
<artifactId>continew-starter-data-core</artifactId>
</dependency>
<!-- CosId通用、灵活、高性能的分布式 ID 生成器) --> <!-- CosId通用、灵活、高性能的分布式 ID 生成器) -->
<dependency> <dependency>
<groupId>me.ahoo.cosid</groupId> <groupId>me.ahoo.cosid</groupId>

View File

@@ -14,10 +14,10 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure; package top.continew.starter.data.mybatis.plus.autoconfigure;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import java.lang.annotation.*; import java.lang.annotation.*;

View File

@@ -14,12 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure; package top.continew.starter.data.mybatis.plus.autoconfigure;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
import top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator.MyBatisPlusIdGeneratorProperties; import top.continew.starter.data.mybatis.plus.autoconfigure.idgenerator.MyBatisPlusIdGeneratorProperties;
/** /**
* MyBatis Plus 扩展配置属性 * MyBatis Plus 扩展配置属性

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure; package top.continew.starter.data.mybatis.plus.autoconfigure;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
@@ -35,11 +35,11 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.continew.starter.core.constant.PropertiesConstants;
import top.charles7c.continew.starter.core.util.GeneralPropertySourceFactory; import top.continew.starter.core.util.GeneralPropertySourceFactory;
import top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator.MyBatisPlusIdGeneratorConfiguration; import top.continew.starter.data.mybatis.plus.autoconfigure.idgenerator.MyBatisPlusIdGeneratorConfiguration;
import top.charles7c.continew.starter.data.mybatis.plus.datapermission.DataPermissionFilter; import top.continew.starter.data.mybatis.plus.datapermission.DataPermissionFilter;
import top.charles7c.continew.starter.data.mybatis.plus.datapermission.DataPermissionHandlerImpl; import top.continew.starter.data.mybatis.plus.datapermission.DataPermissionHandlerImpl;
/** /**
* MyBatis Plus 自动配置 * MyBatis Plus 自动配置

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator; package top.continew.starter.data.mybatis.plus.autoconfigure.idgenerator;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import me.ahoo.cosid.snowflake.SnowflakeId; import me.ahoo.cosid.snowflake.SnowflakeId;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator; package top.continew.starter.data.mybatis.plus.autoconfigure.idgenerator;
import cn.hutool.core.net.NetUtil; import cn.hutool.core.net.NetUtil;
import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator; import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;

View File

@@ -14,9 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.idgenerator; package top.continew.starter.data.mybatis.plus.autoconfigure.idgenerator;
import top.charles7c.continew.starter.data.mybatis.plus.enums.MyBatisPlusIdGeneratorType; import top.continew.starter.data.mybatis.plus.enums.MyBatisPlusIdGeneratorType;
/** /**
* MyBatis ID 生成器配置属性 * MyBatis ID 生成器配置属性

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.base; package top.continew.starter.data.mybatis.plus.base;
import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ClassUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.base; package top.continew.starter.data.mybatis.plus.base;
import com.baomidou.mybatisplus.annotation.IEnum; import com.baomidou.mybatisplus.annotation.IEnum;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.datapermission; package top.continew.starter.data.mybatis.plus.datapermission;
import org.springframework.core.annotation.AliasFor; import org.springframework.core.annotation.AliasFor;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.datapermission; package top.continew.starter.data.mybatis.plus.datapermission;
import java.util.Set; import java.util.Set;

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.datapermission; package top.continew.starter.data.mybatis.plus.datapermission;
/** /**
* 数据权限过滤器接口 * 数据权限过滤器接口

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.datapermission; package top.continew.starter.data.mybatis.plus.datapermission;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -35,7 +35,7 @@ import net.sf.jsqlparser.statement.select.SelectExpressionItem;
import net.sf.jsqlparser.statement.select.SubSelect; import net.sf.jsqlparser.statement.select.SubSelect;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import top.charles7c.continew.starter.core.constant.StringConstants; import top.continew.starter.core.constant.StringConstants;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Collections; import java.util.Collections;
@@ -102,7 +102,7 @@ public class DataPermissionHandlerImpl implements DataPermissionHandler {
case DEPT -> expression = this.buildDeptExpression(dataPermission, currentUser, expression); case DEPT -> expression = this.buildDeptExpression(dataPermission, currentUser, expression);
case SELF -> expression = this.buildSelfExpression(dataPermission, currentUser, expression); case SELF -> expression = this.buildSelfExpression(dataPermission, currentUser, expression);
case CUSTOM -> expression = this.buildCustomExpression(dataPermission, role, expression); case CUSTOM -> expression = this.buildCustomExpression(dataPermission, role, expression);
default -> throw new IllegalArgumentException(String.format("暂不支持 [%s] 数据权限", dataScope)); default -> throw new IllegalArgumentException("暂不支持 [%s] 数据权限".formatted(dataScope));
} }
} }
return null != where ? new AndExpression(where, new Parenthesis(expression)) : expression; return null != where ? new AndExpression(where, new Parenthesis(expression)) : expression;
@@ -112,8 +112,8 @@ public class DataPermissionHandlerImpl implements DataPermissionHandler {
* 构建本部门及以下数据权限表达式 * 构建本部门及以下数据权限表达式
* *
* <p> * <p>
* 处理完后的 SQL 示例<br /> select t1.* from table as t1 where t1.`dept_id` in (select `id` from `sys_dept` where `id` = * 处理完后的 SQL 示例<br /> select t1.* from table as t1 where t1.dept_id in (select id from sys_dept where id =
* xxx or find_in_set(xxx, `ancestors`)); * xxx or find_in_set(xxx, ancestors));
* </p> * </p>
* *
* @param dataPermission 数据权限 * @param dataPermission 数据权限
@@ -147,7 +147,7 @@ public class DataPermissionHandlerImpl implements DataPermissionHandler {
* 构建本部门数据权限表达式 * 构建本部门数据权限表达式
* *
* <p> * <p>
* 处理完后的 SQL 示例<br /> select t1.* from table as t1 where t1.`dept_id` = xxx; * 处理完后的 SQL 示例<br /> select t1.* from table as t1 where t1.dept_id = xxx;
* </p> * </p>
* *
* @param dataPermission 数据权限 * @param dataPermission 数据权限
@@ -168,7 +168,7 @@ public class DataPermissionHandlerImpl implements DataPermissionHandler {
* 构建仅本人数据权限表达式 * 构建仅本人数据权限表达式
* *
* <p> * <p>
* 处理完后的 SQL 示例<br /> select t1.* from table as t1 where t1.`create_user` = xxx; * 处理完后的 SQL 示例<br /> select t1.* from table as t1 where t1.create_user = xxx;
* </p> * </p>
* *
* @param dataPermission 数据权限 * @param dataPermission 数据权限
@@ -190,8 +190,8 @@ public class DataPermissionHandlerImpl implements DataPermissionHandler {
* 构建自定义数据权限表达式 * 构建自定义数据权限表达式
* *
* <p> * <p>
* 处理完后的 SQL 示例<br /> select t1.* from table as t1 where t1.`dept_id` in (select `dept_id` from `sys_role_dept` * 处理完后的 SQL 示例<br /> select t1.* from table as t1 where t1.dept_id in (select dept_id from sys_role_dept
* where `role_id` = xxx); * where role_id = xxx);
* </p> * </p>
* *
* @param dataPermission 数据权限 * @param dataPermission 数据权限
@@ -227,7 +227,7 @@ public class DataPermissionHandlerImpl implements DataPermissionHandler {
*/ */
private Column buildColumn(String tableAlias, String columnName) { private Column buildColumn(String tableAlias, String columnName) {
if (StringUtils.isNotEmpty(tableAlias)) { if (StringUtils.isNotEmpty(tableAlias)) {
return new Column(String.format("%s.%s", tableAlias, columnName)); return new Column("%s.%s".formatted(tableAlias, columnName));
} }
return new Column(columnName); return new Column(columnName);
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.datapermission; package top.continew.starter.data.mybatis.plus.datapermission;
/** /**
* 数据权限枚举 * 数据权限枚举

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.enums; package top.continew.starter.data.mybatis.plus.enums;
/** /**
* MyBatis ID 生成器类型枚举 * MyBatis ID 生成器类型枚举

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.data.mybatis.plus.query; package top.continew.starter.data.mybatis.plus.query;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -23,12 +23,16 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import top.charles7c.continew.starter.core.exception.BadRequestException; import top.continew.starter.core.exception.BadRequestException;
import top.charles7c.continew.starter.core.util.ReflectUtils; import top.continew.starter.core.util.ReflectUtils;
import top.charles7c.continew.starter.core.util.validate.ValidationUtils; import top.continew.starter.core.util.validate.ValidationUtils;
import top.continew.starter.data.core.annotation.Query;
import top.continew.starter.data.core.annotation.QueryIgnore;
import top.continew.starter.data.core.enums.QueryType;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -174,15 +178,15 @@ public class QueryWrapperHelper {
case LIKE_RIGHT -> consumers.add(q -> q.likeRight(columnName, fieldValue)); case LIKE_RIGHT -> consumers.add(q -> q.likeRight(columnName, fieldValue));
case IN -> { case IN -> {
ValidationUtils.throwIfEmpty(fieldValue, "[{}] 不能为空", columnName); ValidationUtils.throwIfEmpty(fieldValue, "[{}] 不能为空", columnName);
consumers.add(q -> q.in(columnName, (List<Object>)fieldValue)); consumers.add(q -> q.in(columnName, (Collection<Object>)fieldValue));
} }
case NOT_IN -> { case NOT_IN -> {
ValidationUtils.throwIfEmpty(fieldValue, "[{}] 不能为空", columnName); ValidationUtils.throwIfEmpty(fieldValue, "[{}] 不能为空", columnName);
consumers.add(q -> q.notIn(columnName, (List<Object>)fieldValue)); consumers.add(q -> q.notIn(columnName, (Collection<Object>)fieldValue));
} }
case IS_NULL -> consumers.add(q -> q.isNull(columnName)); case IS_NULL -> consumers.add(q -> q.isNull(columnName));
case IS_NOT_NULL -> consumers.add(q -> q.isNotNull(columnName)); case IS_NOT_NULL -> consumers.add(q -> q.isNotNull(columnName));
default -> throw new IllegalArgumentException(String.format("暂不支持 [%s] 查询类型", queryType)); default -> throw new IllegalArgumentException("暂不支持 [%s] 查询类型".formatted(queryType));
} }
} }
} }

View File

@@ -14,9 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package top.charles7c.continew.starter.extension.crud.service; package top.continew.starter.data.mybatis.plus.service;
import java.io.Serializable;
/** /**
* 通用业务接口 * 通用业务接口
@@ -25,13 +23,5 @@ import java.io.Serializable;
* @author Charles7c * @author Charles7c
* @since 1.2.0 * @since 1.2.0
*/ */
public interface IService<T> { public interface IService<T> extends com.baomidou.mybatisplus.extension.service.IService<T> {
/**
* 根据 ID 查询
*
* @param id ID
* @return 实体信息
*/
T getById(Serializable id);
} }

View File

@@ -0,0 +1,60 @@
/*
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package top.continew.starter.data.mybatis.plus.service.impl;
import cn.hutool.core.util.ClassUtil;
import top.continew.starter.core.util.ReflectUtils;
import top.continew.starter.core.util.validate.CheckUtils;
import top.continew.starter.data.mybatis.plus.base.BaseMapper;
import top.continew.starter.data.mybatis.plus.service.IService;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.List;
/**
* 通用业务实现类
*
* @param <M> Mapper 接口
* @param <T> 实体类型
* @author Charles7c
* @since 1.5.0
*/
public class ServiceImpl<M extends BaseMapper<T>, T> extends com.baomidou.mybatisplus.extension.service.impl.ServiceImpl<M, T> implements IService<T> {
protected final List<Field> entityFields = ReflectUtils.getNonStaticFields(this.entityClass);
@Override
public T getById(Serializable id) {
return this.getById(id, true);
}
/**
* 根据 ID 查询
*
* @param id ID
* @param isCheckExists 是否检查存在
* @return 实体信息
*/
protected T getById(Serializable id, boolean isCheckExists) {
T entity = baseMapper.selectById(id);
if (isCheckExists) {
CheckUtils.throwIfNotExists(entity, ClassUtil.getClassName(entityClass, true), "ID", id);
}
return entity;
}
}

View File

@@ -1 +1 @@
top.charles7c.continew.starter.data.mybatis.plus.autoconfigure.MybatisPlusAutoConfiguration top.continew.starter.data.mybatis.plus.autoconfigure.MybatisPlusAutoConfiguration

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter</artifactId> <artifactId>continew-starter</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -14,13 +14,14 @@
<description>ContiNew Starter 数据访问模块</description> <description>ContiNew Starter 数据访问模块</description>
<modules> <modules>
<module>continew-starter-data-core</module>
<module>continew-starter-data-mybatis-plus</module> <module>continew-starter-data-mybatis-plus</module>
</modules> </modules>
<dependencies> <dependencies>
<!-- 核心模块 --> <!-- 核心模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-core</artifactId> <artifactId>continew-starter-core</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -6,11 +6,11 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId> <artifactId>spring-boot-dependencies</artifactId>
<version>3.1.8</version> <version>3.1.10</version>
<relativePath/> <relativePath/>
</parent> </parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-dependencies</artifactId> <artifactId>continew-starter-dependencies</artifactId>
<version>${revision}</version> <version>${revision}</version>
<packaging>pom</packaging> <packaging>pom</packaging>
@@ -34,47 +34,37 @@
<timezone>+8</timezone> <timezone>+8</timezone>
<url>https://github.com/Charles7c</url> <url>https://github.com/Charles7c</url>
</developer> </developer>
<developer>
<id>bull-bcls</id>
<name>Bull-BCLS</name>
<email>Tomcat416@163.com</email>
<roles>
<role>Java Development Engineer</role>
</roles>
<timezone>+8</timezone>
<url>https://github.com/Bull-BCLS</url>
</developer>
</developers> </developers>
<scm> <scm>
<url>https://github.com/Charles7c/continew-starter</url>
<connection>scm:git:git@github.com:Charles7c/continew-starter.git</connection> <connection>scm:git:git@github.com:Charles7c/continew-starter.git</connection>
<developerConnection>scm:git:git@github.com:Charles7c/continew-starter.git</developerConnection> <developerConnection>scm:git:git@github.com:Charles7c/continew-starter.git</developerConnection>
<url>https://github.com/Charles7c/continew-starter</url>
</scm> </scm>
<properties> <properties>
<!-- 项目版本号 --> <!-- 项目版本号 -->
<revision>1.4.0</revision> <revision>2.0.0</revision>
<sa-token.version>1.37.0</sa-token.version> <sa-token.version>1.37.0</sa-token.version>
<just-auth.version>1.16.6</just-auth.version> <just-auth.version>1.16.6</just-auth.version>
<mybatis-plus.version>3.5.5</mybatis-plus.version> <mybatis-plus.version>3.5.5</mybatis-plus.version>
<dynamic-datasource.version>4.3.0</dynamic-datasource.version> <dynamic-datasource.version>4.3.0</dynamic-datasource.version>
<p6spy.version>3.9.1</p6spy.version> <p6spy.version>3.9.1</p6spy.version>
<jetcache.version>2.7.5</jetcache.version> <jetcache.version>2.7.5</jetcache.version>
<redisson.version>3.26.0</redisson.version> <redisson.version>3.28.0</redisson.version>
<cosid.version>2.6.5</cosid.version> <cosid.version>2.6.8</cosid.version>
<sms4j.version>3.1.1</sms4j.version> <sms4j.version>3.2.1</sms4j.version>
<aj-captcha.version>1.3.0</aj-captcha.version> <aj-captcha.version>1.3.0</aj-captcha.version>
<easy-captcha.version>1.6.2</easy-captcha.version> <easy-captcha.version>1.6.2</easy-captcha.version>
<easy-excel.version>3.3.3</easy-excel.version> <easy-excel.version>3.3.4</easy-excel.version>
<nashorn.version>15.4</nashorn.version> <nashorn.version>15.4</nashorn.version>
<x-file-storage.version>2.1.0</x-file-storage.version> <x-file-storage.version>2.1.0</x-file-storage.version>
<aws-s3.version>1.12.651</aws-s3.version> <aws-s3.version>1.12.702</aws-s3.version>
<crane4j.version>2.5.0</crane4j.version> <crane4j.version>2.7.0</crane4j.version>
<knife4j.version>4.5.0</knife4j.version> <knife4j.version>4.5.0</knife4j.version>
<tlog.version>1.5.1</tlog.version> <tlog.version>1.5.2</tlog.version>
<ttl.version>2.14.4</ttl.version> <ttl.version>2.14.5</ttl.version>
<ip2region.version>3.1.7</ip2region.version> <ip2region.version>3.1.10</ip2region.version>
<hutool.version>5.8.25</hutool.version> <hutool.version>5.8.27</hutool.version>
<!-- Maven Plugin Versions --> <!-- Maven Plugin Versions -->
<flatten.version>1.6.0</flatten.version> <flatten.version>1.6.0</flatten.version>
<spotless.version>2.43.0</spotless.version> <spotless.version>2.43.0</spotless.version>
@@ -295,161 +285,154 @@
<!-- ContiNew Starter 依赖 --> <!-- ContiNew Starter 依赖 -->
<!-- 扩展模块 - CRUD --> <!-- 扩展模块 - CRUD -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-extension-crud</artifactId> <artifactId>continew-starter-extension-crud</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 认证模块 - JustAuth --> <!-- 认证模块 - JustAuth -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-auth-justauth</artifactId> <artifactId>continew-starter-auth-justauth</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 认证模块 - SaToken --> <!-- 认证模块 - SaToken -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-auth-satoken</artifactId> <artifactId>continew-starter-auth-satoken</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 数据访问模块 - MyBatis Plus --> <!-- 数据访问模块 - MyBatis Plus -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-data-mybatis-plus</artifactId> <artifactId>continew-starter-data-mybatis-plus</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 数据访问模块 - 核心模块 -->
<dependency>
<groupId>top.continew</groupId>
<artifactId>continew-starter-data-core</artifactId>
<version>${revision}</version>
</dependency>
<!-- 缓存模块 - JetCache --> <!-- 缓存模块 - JetCache -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache-jetcache</artifactId> <artifactId>continew-starter-cache-jetcache</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 缓存模块 - Spring Cache --> <!-- 缓存模块 - Spring Cache -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache-springcache</artifactId> <artifactId>continew-starter-cache-springcache</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 缓存模块 - Redisson --> <!-- 缓存模块 - Redisson -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-cache-redisson</artifactId> <artifactId>continew-starter-cache-redisson</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 消息模块 - SMS -->
<dependency>
<groupId>top.charles7c.continew</groupId>
<artifactId>continew-starter-messaging-sms</artifactId>
<version>${revision}</version>
</dependency>
<!-- 消息模块 - 邮件 --> <!-- 消息模块 - 邮件 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-messaging-mail</artifactId> <artifactId>continew-starter-messaging-mail</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 验证码模块 - 行为验证码 --> <!-- 验证码模块 - 行为验证码 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-captcha-behavior</artifactId> <artifactId>continew-starter-captcha-behavior</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 验证码模块 - 图形验证码 --> <!-- 验证码模块 - 图形验证码 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-captcha-graphic</artifactId> <artifactId>continew-starter-captcha-graphic</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 文件处理模块 - Excel --> <!-- 文件处理模块 - Excel -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-file-excel</artifactId> <artifactId>continew-starter-file-excel</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 存储模块 - 本地存储 --> <!-- 存储模块 - 本地存储 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-storage-local</artifactId> <artifactId>continew-starter-storage-local</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 日志模块 - HttpTraceProSpring Boot Actuator HttpTrace 定制增强版) --> <!-- 日志模块 - HttpTraceProSpring Boot Actuator HttpTrace 定制增强版) -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-log-httptrace-pro</artifactId> <artifactId>continew-starter-log-httptrace-pro</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 日志模块 - 公共模块 --> <!-- 日志模块 - 核心模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-log-common</artifactId> <artifactId>continew-starter-log-core</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- Web 模块 --> <!-- Web 模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-web</artifactId> <artifactId>continew-starter-web</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 安全模块 - 统一模块 -->
<dependency>
<groupId>top.charles7c.continew</groupId>
<artifactId>continew-starter-security-all</artifactId>
<version>${revision}</version>
</dependency>
<!-- 安全模块 - 加密 --> <!-- 安全模块 - 加密 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-security-crypto</artifactId> <artifactId>continew-starter-security-crypto</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 安全模块 - 脱敏 --> <!-- 安全模块 - 脱敏 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-security-mask</artifactId> <artifactId>continew-starter-security-mask</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 安全模块 - 密码编码器 --> <!-- 安全模块 - 密码编码器 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-security-password</artifactId> <artifactId>continew-starter-security-password</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- API 文档模块 --> <!-- API 文档模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-api-doc</artifactId> <artifactId>continew-starter-api-doc</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- JSON 模块 - Jackson --> <!-- JSON 模块 - Jackson -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-json-jackson</artifactId> <artifactId>continew-starter-json-jackson</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 核心模块 --> <!-- 核心模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-core</artifactId> <artifactId>continew-starter-core</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
@@ -655,20 +638,18 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.4.0</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
<tokenAuth>true</tokenAuth>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
<distributionManagement>
<snapshotRepository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>sonatype-nexus-staging</id>
<name>Nexus Release Repository</name>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile> </profile>
<!-- Sonar 代码质量分析 --> <!-- Sonar 代码质量分析 -->
<profile> <profile>

View File

@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-extension</artifactId> <artifactId>continew-starter-extension</artifactId>
<version>${revision}</version> <version>${revision}</version>
</parent> </parent>
@@ -26,25 +26,25 @@
<!-- 认证模块 - SaToken --> <!-- 认证模块 - SaToken -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-auth-satoken</artifactId> <artifactId>continew-starter-auth-satoken</artifactId>
</dependency> </dependency>
<!-- 数据访问模块 - MyBatis Plus --> <!-- 数据访问模块 - MyBatis Plus -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-data-mybatis-plus</artifactId> <artifactId>continew-starter-data-mybatis-plus</artifactId>
</dependency> </dependency>
<!-- 文件处理模块 - Excel --> <!-- 文件处理模块 - Excel -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-file-excel</artifactId> <artifactId>continew-starter-file-excel</artifactId>
</dependency> </dependency>
<!-- Web 模块 --> <!-- Web 模块 -->
<dependency> <dependency>
<groupId>top.charles7c.continew</groupId> <groupId>top.continew</groupId>
<artifactId>continew-starter-web</artifactId> <artifactId>continew-starter-web</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

Some files were not shown because too many files have changed in this diff Show More