yukaidi
4ac80bbfe8
fix: gmavenplus-plugin 添加 Groovy 依赖
2026-05-29 10:34:24 +08:00
yukaidi
cfe8352d45
refactor: GitHub URL 改为构建时自动从 git remote origin 识别
...
前端:vue.config.js 通过 DefinePlugin 注入 VUE_APP_GITHUB_REPO_URL,
Home.vue/Playground.vue 中硬编码的 GitHub URL 全部改为动态变量。
后端:parser/pom.xml 添加 gmavenplus-plugin 在 initialize 阶段从
git remote origin 解析 github.owner/github.repo,SCM 字段引用 property。
2026-05-29 10:29:44 +08:00
yukaidi
4a0fe61d30
fix: ParserCreate 正则匹配 PWD 组时捕获 IllegalArgumentException
...
matcher.group(PWD) 在正则未定义 PWD 命名组时抛出
IllegalArgumentException 而非 IllegalStateException,原 catch 未覆盖
导致无提取码的链接(如QQ文件分享)返回 500。
2026-05-29 10:13:22 +08:00
yukaidi
c62e109aff
fix: 将硬编码的上游 GitHub URL 改为 fork 地址
...
Home.vue、Playground.vue、parser/pom.xml 中的 qaiu/netdisk-fast-download
URL 全部替换为 yukaidi1220/netdisk-fast-download。
2026-05-29 10:09:49 +08:00
yukaidi
1d243b8f1b
fix: Docker EXPOSE 改为仅 6401,entrypoint 添加 -Duser.timezone
...
审查发现:
- EXPOSE 6400 误导用户映射后端端口,实际只需 6401(反向代理)
- TZ 环境变量不如 JVM -Duser.timezone 可靠
2026-05-29 09:57:05 +08:00
yukaidi
732a7f86fe
fix: Docker entrypoint 以 root 运行再降权,彻底解决 volume 权限问题
...
去掉 USER appuser,entrypoint 以 root 身份运行,先 chown 修复
volume 挂载目录的权限,再通过 su 降权到 appuser 执行应用。
2026-05-29 09:49:22 +08:00
yukaidi
3c428f6a6d
fix: ShutdownHook 注册顺序调整,确保 Vert.x 先于 JDBCPoolInit 关闭
...
JVM ShutdownHook 按注册逆序执行。将 AppMain 的 hook 移到 Deploy.start() 之前注册,
使执行顺序变为:Deploy hook(关闭 Vert.x)-> AppMain hook(关闭 JDBCPoolInit/JsParserExecutor)。
2026-05-29 09:01:08 +08:00
yukaidi
bff17f2d4e
fix: run.sh 改用 exec 直接运行 Java,修复 Docker 中 ShutdownHook 失效
...
原 nohup+tail-f 模式下,Docker SIGTERM 发给 tail 而非 Java 进程,
导致 ShutdownHook 永远不会触发,资源无法优雅关闭。
改为 exec 让 Java 成为 PID 1,正确接收信号。
同时支持通过 JVM_XMX/JVM_OPTS 环境变量自定义 JVM 参数。
2026-05-29 08:46:57 +08:00
yukaidi
df600eaada
fix: Dockerfile 预创建 db 和 logs 目录,修复非 root 用户无法写入 H2 数据库
...
appuser 运行时无法在 /app 下创建新子目录,H2 尝试创建 /app/db/nfdData.mv.db
时因目录不存在导致 AccessDeniedException。在 chown 之前预创建目录。
2026-05-29 08:34:59 +08:00
yukaidi
dd4027c931
fix: LzTool/IzToolWithAuth 最后两处 .get().toString() NPE 风险
...
- LzTool:221 — obj.get("url").toString() 改为 String.valueOf()
- IzToolWithAuth:434 — get("uuid").toString() 添加 null 检查
2026-05-29 07:54:33 +08:00
yukaidi
d1569195e4
fix: AppMain 注册 ShutdownHook 关闭 JDBCPoolInit 和 JsParserExecutor
...
审查发现 9c3945f 因模块依赖问题回退了 ShutdownHook 中的清理逻辑,
导致 JDBCPoolInit 连接池和 JsParserExecutor WorkerExecutor 在进程退出时
无法被显式关闭。将清理逻辑移到 web-service 模块的 AppMain(可依赖所有模块)。
2026-05-29 07:22:57 +08:00
yukaidi
d6e88f0c53
fix: PlaygroundApi 移除重复 import 和未使用的 getStackTrace 死代码
...
审查发现 42925c8 引入了重复的 StandardCharsets import,且 getStackTrace
方法在移除堆栈泄露后无任何调用方,属于死代码。
2026-05-29 07:06:53 +08:00
yukaidi
2a9fa81e56
fix: CacheManager registerPeriodicCleanup 添加防重入和 Vertx 就绪检查
...
审查发现 static 块中注册定时任务存在时序风险:如果 CacheServiceImpl 在 Vertx
初始化前被加载,定时任务将注册失败且无法恢复。添加 cleanupRegistered 标志防止
重复注册,Vertx 未就绪时跳过并等待下次调用。
2026-05-29 07:02:23 +08:00
yukaidi
5eed1fdfa0
revert: 回退 MyData.java 的构造函数修改,恢复为空 TODO
...
用户明确表示不需要改动 MyData 的 TODO,回退 741d7aa 对该文件的修改。
2026-05-29 06:58:41 +08:00
yukaidi
cf7fc4f502
fix: FjTool login() 中 token.substring 添加 null 保护
...
token 脱敏日志在 token 可能为 null 时会抛 NPE,添加 null 检查。
2026-05-29 06:58:09 +08:00
yukaidi
0ea31d631a
fix: 移除 IzTool/IzToolWithAuth login() 中未使用的 h 变量(死代码)
...
并发安全修复引入的 h 变量创建后从未使用,后续请求仍通过
setTemplateParam("appToken", token) 传递 token。删除死代码并为
同一行的 token.substring 添加 null 保护。
2026-05-29 06:57:44 +08:00
yukaidi
74840ab63f
fix(FsTool): 收窄 parseFileNameFromContentDisposition 中的 catch 异常类型
...
将 catch(Exception) 改为 catch(IllegalArgumentException),
只捕获 URLDecoder.decode 在遇到非法百分比编码时抛出的具体异常。
2026-05-29 06:38:35 +08:00
yukaidi
31f33339f1
fix(FsTool): 修复 parseById 中 get("paramJson") 可能导致的 NPE
...
当 otherParam 中缺少 "paramJson" 键时,后续 getString 调用会抛出 NPE。
添加 null 检查并提前返回失败。
2026-05-29 06:37:53 +08:00
yukaidi
c0a0d0dc47
fix(FjTool): 修复 parseById 中 get("paramJson") 可能导致的 NPE
...
当 otherParam 中缺少 "paramJson" 键时,后续 getString 调用会抛出 NPE。
添加 null 检查并提前返回失败。
2026-05-29 06:37:12 +08:00
yukaidi
0cd77ee9b9
fix(IzTool): 修复 parseFileList 中 get("uuid") 可能导致的 NPE
...
当 otherParam 中缺少 "uuid" 键时,原代码直接调用 .toString() 会抛出
NullPointerException。改为先取出 Object 再做 null 检查。
2026-05-29 06:36:43 +08:00
yukaidi
741d7aa8ca
fix: implement MyData @DataObject constructor deserialization
...
Implement the MyData(JsonObject) constructor to deserialize `id` and
`maxSize` fields from the provided JsonObject, replacing the empty TODO.
2026-05-29 06:28:39 +08:00
yukaidi
d06a80dc73
fix: narrow catch exception type in LzTool.java
...
Replace 2 instances of `catch (Exception ignored)` with
`catch (MalformedURLException ignored)` around `new java.net.URL(url)`
calls, since that constructor only throws MalformedURLException.
2026-05-29 06:28:20 +08:00
yukaidi
86b9c43b8b
fix: narrow catch exception type in ParserCreate.java
...
Replace 5 instances of `catch (Exception ignored)` with
`catch (IllegalStateException ignored)` around matcher.group() calls,
since that method only throws IllegalStateException when a named group
does not exist.
2026-05-29 06:27:51 +08:00
yukaidi
206981d4b4
revert: RouterHandlerFactory failureHandler 恢复返回 failure message
...
原 ctx.failure().getMessage() 是故意设计——RateLimiter 等组件通过 promise.fail()
传递用户友好的错误消息(如"请求次数太多了"),这些消息需要通过 failureHandler
返回给客户端。改为固定"服务器内部错误"会导致这些消息丢失。
仅添加 null 检查防止 NPE。
2026-05-29 06:15:56 +08:00
yukaidi
7d5831b5f4
fix: 彻底消除用户枚举和异常信息泄露的遗留问题
...
- UserServiceImpl: 3处"用户不存在"统一改为"用户名或密码错误"/"认证失败"
- RouterHandlerFactory: failureHandler 中 ctx.failure().getMessage() 改为"服务器内部错误"
2026-05-29 05:53:40 +08:00
yukaidi
7ca63985bd
fix(test): 删除空的 ParserApiClientLinkTest 文件
...
该文件仅包含空行,无实际测试代码,直接删除。
2026-05-29 04:06:21 +08:00
yukaidi
06416a4e5f
fix(test): JsFetchBridgeTest Vertx 资源泄漏修复
...
将各 @Test 方法中局部创建的 Vertx.vertx() 统一为成员变量,
通过 @Before 创建并初始化,@After 关闭,避免资源泄漏。
2026-05-29 04:06:13 +08:00
yukaidi
88739e8d1a
fix(test): JsParserTest Vertx 资源泄漏修复
...
将各 @Test 方法中局部创建的 Vertx.vertx() 统一为成员变量,
通过 @Before 创建并初始化,@After 关闭,避免资源泄漏。
2026-05-29 04:04:52 +08:00
yukaidi
ffaba4f496
fix(test): BaiduPhotoParserTest Vertx 资源泄漏修复
...
将各 @Test 方法中局部创建的 Vertx.vertx() 统一为成员变量,
通过 @Before 创建并初始化,@After 关闭,避免资源泄漏。
2026-05-29 04:03:37 +08:00
yukaidi
c4f94a2bc7
fix: replace printStackTrace/System.out.println with logger in JsHttpClient, PlaygroundApi, LogStatistics, CacheServiceImpl, JsPlaygroundExecutor, JsPlaygroundLogger
2026-05-29 03:48:11 +08:00
yukaidi
49a3918244
fix: replace double-brace init with static block + Collections.unmodifiableMap; add final to UNIQUE_PREFIX
2026-05-29 03:40:06 +08:00
yukaidi
caddff567f
fix: replace System.out.println with logger in IpExtractor
2026-05-29 03:39:36 +08:00
yukaidi
aed9e9f10d
fix: replace System.out.println/printStackTrace with logger in ReqIpUtil; add final to static fields
2026-05-29 03:39:11 +08:00
yukaidi
6557b49383
fix: replace System.out.println with log.debug in MkgsTool
2026-05-29 03:38:36 +08:00
yukaidi
082cc4c743
fix: replace System.out.println with log in PodTool; mask token in log output
2026-05-29 03:38:07 +08:00
yukaidi
e261ebe698
fix: replace System.out.println with log.debug in WsTool
2026-05-29 03:37:32 +08:00
yukaidi
5a0dc69186
chore: remove debug console.log statements
...
Remove debug logging from production code while preserving
console.error and console.warn for actual error/warning cases.
2026-05-29 03:28:22 +08:00
yukaidi
29d8bf3ea4
fix(security): add noopener,noreferrer to all window.open calls
...
Prevent reverse tabnapping by adding security attributes to all
window.open calls that open links in new tabs.
2026-05-29 03:24:53 +08:00
yukaidi
07a330cfd4
fix: LocalConstant 改用 ConcurrentHashMap 保证线程安全,LzTool 方法名拼写修正
...
- LocalConstant: HashMap → ConcurrentHashMap,put() 改用 putIfAbsent 消除 check-then-act 竞态
- LzTool: 私有方法 setDateAndComplate → setDateAndComplete(拼写修正,仅内部调用)
2026-05-29 03:14:10 +08:00
yukaidi
aa30571709
fix(security): 升级 axios 版本 1.13.5 -> 1.16.1
...
修复 14 个安全漏洞
2026-05-29 03:08:59 +08:00
yukaidi
2bb9912cf5
fix(security): 升级 Vert.x 版本 4.5.24 -> 4.5.27 (parser 模块)
...
修复 SslContext 缓存 DoS 漏洞
2026-05-29 03:08:43 +08:00
yukaidi
8f77d9fe98
fix(security): 升级 Vert.x 版本 4.5.24 -> 4.5.27 (根 pom.xml)
...
修复 SslContext 缓存 DoS 漏洞
2026-05-29 03:08:27 +08:00
yukaidi
9cb32b3e8f
fix(security): 升级 postgresql 驱动版本 42.7.3 -> 42.7.11
...
修复 SCRAM 认证 DoS 漏洞
2026-05-29 03:08:00 +08:00
yukaidi
080206925f
fix(security): 升级 logback 版本 1.5.19 -> 1.5.32 (parser 模块)
...
修复 CVE-2024-12798 等 3 个安全漏洞
2026-05-29 03:07:39 +08:00
yukaidi
54d2a8189c
fix(security): 升级 logback 版本 1.5.18 -> 1.5.32 (根 pom.xml)
...
修复 CVE-2024-12798 等 3 个安全漏洞
2026-05-29 03:07:22 +08:00
yukaidi
377bc12cf9
fix: Dockerfile 添加非 root 用户运行应用,提升容器安全性
2026-05-29 02:55:57 +08:00
yukaidi
da715c8a8f
fix: CacheManager 消除双括号初始化,改用标准 HashMap 写法
2026-05-29 02:55:32 +08:00
yukaidi
fa4028296f
fix: FjTool parseFileList 中 uuid 参数为 null 时的 NPE
2026-05-29 02:54:00 +08:00
yukaidi
dc629a3126
fix: P115Tool 中 UA 参数为 null 时的 NPE,添加默认 User-Agent
2026-05-29 02:53:32 +08:00
yukaidi
746c7ad5b3
fix: 替换 e.printStackTrace() 和 System.out.println 为 logger 调用
...
- HttpProxyVerticle: err.printStackTrace() / e.printStackTrace() -> LOGGER.error()
- RouterHandlerFactory: 5处 printStackTrace() -> LOGGER.error()
- CommonUtil: e.printStackTrace() -> LOGGER.error()
- ReflectionUtil: 新增 LOGGER,3处 printStackTrace() -> LOGGER.error()
- CreateDatabase: e.printStackTrace() -> LOGGER.error()
- URLUtil: 新增 LOGGER,e.printStackTrace() -> LOGGER.error()
- LzTool: e.printStackTrace() -> log.error()
- MkwTool: 3处 System.out.println + 1处 printStackTrace -> log.debug()/log.error()
- PdbTool: e.printStackTrace() -> log.error()
- ParserApi: t.printStackTrace() -> log.error()
- CacheManager: 2处 Throwable::printStackTrace -> LOGGER.error()
- QQTool: 3处 System.out.println -> log.debug()
- FjTool: System.out.println -> log.debug()
2026-05-29 02:50:06 +08:00
yukaidi
aef1b9ab11
fix: IzToolWithAuth 并发安全 - token/authFlag 改为 volatile,header 副本替代共享修改
2026-05-29 02:49:01 +08:00
yukaidi
79c9eb3dda
fix: FjTool 并发安全 - token/userId/authFlag 改为 volatile,header0 副本替代共享修改
2026-05-29 02:48:13 +08:00
yukaidi
5a08ed68c2
fix: IzTool 并发安全 - token/authFlag 改为 volatile,header 副本替代共享修改
2026-05-29 02:47:27 +08:00
yukaidi
e5a623c5a8
fix: 将 secret.yml 加入 .gitignore 防止敏感配置泄露
2026-05-29 02:41:00 +08:00
yukaidi
4586138bf1
fix: 修复 AESUtils.getRandomString 使用不安全的 Random,改为 SecureRandom
2026-05-29 02:40:32 +08:00
yukaidi
1dddec110e
fix: 修复 PasswordUtil.checkPassword 中的时序攻击漏洞,使用 MessageDigest.isEqual()
2026-05-29 02:39:31 +08:00
yukaidi
46e9999e4c
fix: 修复 CacheManager.updateTotalByField 中 getShareKeyTotal 缺少 onFailure 导致 Promise 永不完成
2026-05-29 02:39:05 +08:00
yukaidi
a664ae3a56
fix: 修复 ParserApi 中 redirectUrl() 和 viewUrl() 的 Promise 未 complete 问题
2026-05-29 02:38:27 +08:00
yukaidi
9bcdcb2cb7
fix: 修复 MkwTool 中 set-cookie 为 null 时的 NPE
2026-05-29 02:37:22 +08:00
yukaidi
0b8592559a
fix: 修复 CommonUtils.getURLParams() 中 fullUrl.getQuery() 返回 null 时的 NPE
2026-05-29 02:36:47 +08:00
yukaidi
c0b18be5ab
fix: 修复 ShareLinkInfo.getCacheKey() 中 otherParam.get("UA") 可能导致的 NPE
2026-05-29 02:36:20 +08:00
yukaidi
46b2eb1ccd
修复RouterHandlerFactory异常信息泄露:Future失败和异常捕获时返回通用错误消息,详细异常仅记日志
2026-05-29 02:26:12 +08:00
yukaidi
d323376bed
修复RateLimiter count++非原子操作:将volatile int改为AtomicInteger,使用incrementAndGet()
2026-05-29 02:25:07 +08:00
yukaidi
838c86ae15
修复JsParserExecutor DCL模式缺少volatile:EXECUTOR字段添加volatile保证多线程可见性
2026-05-29 02:23:17 +08:00
yukaidi
42925c857c
修复Playground密码时序攻击和堆栈泄露:使用MessageDigest.isEqual()比较密码,移除返回给客户端的完整堆栈信息
2026-05-29 02:22:52 +08:00
yukaidi
ba981d281f
修复Token日志泄露:日志中token仅打印前8个字符,其余用...替代
2026-05-29 02:21:12 +08:00
yukaidi
4159b884de
修复登录用户枚举和异常信息泄露:统一登录失败提示为'用户名或密码错误',隐藏数据库异常详情
2026-05-29 02:19:22 +08:00
yukaidi
36b38421e5
修复JWT签名验证时序攻击:使用MessageDigest.isEqual()替代String.equals()进行签名比较
2026-05-29 02:18:43 +08:00
yukaidi
b77c8a80e9
fix(web-service): ParserApi 中 CacheManager/ServerApi 改为 static 避免每次请求重复创建
...
CacheManager 和 ServerApi 无请求级状态,每次 new 会造成不必要的对象分配,
改为 static final 字段复用;同时修复 viewURL 中内联 new ServerApi()。
2026-05-29 02:14:32 +08:00
yukaidi
886dcd039f
fix(web-service): DbServiceImpl Thread.sleep 改为 vertx.setTimer 避免阻塞 event loop
...
sayOk() 中使用 Thread.sleep(4000) 会阻塞 Vert.x event loop 线程,
改为 vertx.setTimer 异步延迟完成 promise。
2026-05-29 02:13:42 +08:00
yukaidi
d99885d396
fix(core): RouterVerticle Router 从 static final 改为实例字段
...
Router 声明为 static final 会在类加载时提前创建,
与 Vert.x 实例生命周期不匹配,改为在 start() 中初始化为实例字段。
2026-05-29 02:12:37 +08:00
yukaidi
942de9c430
fix(core): ConfigRetriever 成功路径也调用 close() 防止资源泄漏
...
readConfig() 中 onSuccess 回调未关闭 ConfigRetriever,
文件监听器和底层资源无法释放,现在成功和失败路径均调用 close()。
2026-05-29 02:11:35 +08:00
yukaidi
ae3ff9ecbb
fix(parser): JsPlaygroundLogger 日志列表限制最大 1000 条防止内存泄漏
...
日志列表 Collections.synchronizedList 无容量限制,长时间运行会无界增长。
新增 addLog() 方法,在添加前检查容量,超过 1000 条时移除最早的条目。
2026-05-29 02:09:59 +08:00
yukaidi
bcc4315ea9
fix(parser): JsScriptLoader JarFile 改用 try-with-resources 防止文件句柄泄漏
...
JarFile 在手动 close() 时若中间抛异常会导致文件句柄未关闭,
改为 try-with-resources 确保无论正常或异常都能释放资源。
2026-05-29 02:08:50 +08:00
yukaidi
2f7304ab2d
fix: Docker 镜像地址改为动态获取仓库名,修复 fork 仓库推送被拒绝
2026-05-29 01:47:16 +08:00
yukaidi
0df01ba3d5
fix: Deploy配置读取失败时主线程永久阻塞
...
BUG-05: 配置读取失败时仅调用printStackTrace,未调用LockSupport.unpark()
导致主线程永远阻塞在LockSupport.park()
现在失败时记录错误日志、unpark主线程并退出进程
2026-05-29 01:40:38 +08:00
yukaidi
710e454fd0
fix: dependency graph 步骤添加 continue-on-error,fork 仓库未启用时不影响 CI
2026-05-29 01:40:30 +08:00
yukaidi
c46dfa00a0
fix: ReverseProxyVerticle HTTPS默认端口应为443而非80
...
BUG-03: URL使用https://前缀构造,但默认端口设为80(HTTP)
导致所有未指定端口的HTTPS代理目标连接失败
2026-05-29 01:40:05 +08:00
yukaidi
9a3ea05023
fix: HttpProxyVerticle代理认证绕过漏洞
...
SEC-01: 修复三个安全问题:
1. split.length<=1时直接放行请求,现在返回403
2. Base64解码无异常处理,现在捕获IllegalArgumentException返回403
3. 日志中明文记录密码,现在只记录用户名
2026-05-29 01:39:31 +08:00
yukaidi
66d7a62d3a
fix: ReflectionUtil正则拼写错误boolen应为boolean
...
BUG-02: boolen拼写错误导致boolean[]类型参数永远不会被识别为基本类型数组
参数绑定失败并抛出RuntimeException
2026-05-29 01:38:53 +08:00
yukaidi
f1b6cd3e18
fix: HttpProxyConf构造器port字段从未赋值,timeout被重复赋值
...
BUG-01: this.timeout = DEFAULT_PORT 应为 this.port = DEFAULT_PORT
导致port字段始终为null,代理服务器无法获取正确端口
2026-05-29 01:38:24 +08:00
yukaidi
189d1477a8
fix: 将 fetch-runtime.js 复制到 test resources,修复测试类加载不到资源文件
...
CI 运行测试时 JsParserExecutor.loadFetchRuntime() 通过 ClassLoader.getResourceAsStream
找不到 fetch-runtime.js。将文件复制到 parser/src/test/resources/ 确保测试类路径可用。
2026-05-29 01:25:32 +08:00
yukaidi
9c3945f45a
fix: 修复编译错误,core 模块不能依赖 web-service/parser/core-database
...
core 模块的 Deploy.java 和 PostExecVerticle.java 直接引用了上层模块的类,
导致编译失败(package does not exist)。
- Deploy.java: 移除对 JDBCPoolInit 和 JsParserExecutor 的显式调用,
vertx.close() 会级联关闭 Vert.x 创建的资源
- PostExecVerticle.java: 移除缓存定时清理逻辑(不能引用 web-service 的 CacheManager)
- CacheManager: 添加 registerPeriodicCleanup() 静态方法,通过 VertxHolder 注册定时任务
- CacheServiceImpl: static 块中调用 CacheManager.registerPeriodicCleanup(),服务加载时自动注册
2026-05-29 01:08:15 +08:00
yukaidi
77c7d6c5d6
fix: ShutdownHook 中 JDBCPoolInit.instance() 添加 null 检查,防止未初始化时 NPE
...
安装引导模式下数据库可能未配置,JDBCPoolInit.instance() 为 null,直接调用 close() 会 NPE。
2026-05-29 00:53:31 +08:00
yukaidi
ab3009e9cc
fix: ShutdownHook 接入 JDBCPoolInit.close() 和 JsParserExecutor.shutdownExecutor()
...
将已实现但未调用的 close()/shutdownExecutor() 接入 JVM ShutdownHook,显式释放资源。
关闭顺序:vertx.close() → JDBC 连接池 → WorkerExecutor 线程池,确保依赖关系正确。
2026-05-29 00:50:45 +08:00
yukaidi
1c2291f9cf
Revert "fix(performance): CommonUtil initConfig 改为异步非阻塞读取"
...
This reverts commit 6dfa770137 .
2026-05-29 00:37:27 +08:00
yukaidi
efb135ee48
Revert "fix(error): URLUtil 异常不再吞没,改为抛出 IllegalArgumentException"
...
This reverts commit 0dfee8ab22 .
2026-05-29 00:37:18 +08:00
yukaidi
0699c4a127
Revert "fix(memory): ReflectionUtil 添加 SoftReference + TTL 缓存清理"
...
This reverts commit be1ed3d46d .
2026-05-29 00:37:09 +08:00
yukaidi
33cef5f8e1
Revert "fix(resource): ReqIpUtil 使用统一 Vertx 单例"
...
This reverts commit 1fca578c07 .
2026-05-29 00:36:55 +08:00
yukaidi
32d467b6d9
Revert "fix(security): SecurityClassFilter 改为白名单策略"
...
This reverts commit a83665ac44 .
2026-05-29 00:35:10 +08:00
yukaidi
6dfa770137
fix(performance): CommonUtil initConfig 改为异步非阻塞读取
2026-05-29 00:33:27 +08:00
yukaidi
0dfee8ab22
fix(error): URLUtil 异常不再吞没,改为抛出 IllegalArgumentException
...
原代码 catch Exception 后仅打印堆栈,调用方无法感知解析失败。
改为抛出 IllegalArgumentException,让调用方明确知道 URL 解析失败。
2026-05-29 00:33:10 +08:00
yukaidi
85fe910f25
fix(bug): ParamUtil 修复数组越界问题
...
原代码当 kv.length == 0 时访问 kv[0] 会抛出异常。
改为跳过空参数,使用 split(=, 2) 限制分割次数。
2026-05-29 00:32:56 +08:00
yukaidi
6c60b0116f
fix(resource): JDBCPoolInit 实现 AutoCloseable 添加 close() 方法
...
原代码单例模式无关闭方法,应用退出时数据库连接池无法释放。
改为:
- 实现 AutoCloseable 接口
- 添加 close() 方法关闭连接池
- 关闭后将 pool 置 null 防止重复关闭
2026-05-29 00:32:26 +08:00
yukaidi
8dfcf510f6
fix(resource): JsParserExecutor WorkerExecutor 懒加载 + 关闭支持
...
原代码静态初始化 WorkerExecutor,应用关闭时无法释放线程资源。
改为:
- 懒加载创建 WorkerExecutor
- 实现 AutoCloseable 接口
- 添加 shutdownExecutor() 静态方法供应用关闭时调用
2026-05-29 00:32:13 +08:00
yukaidi
be1ed3d46d
fix(memory): ReflectionUtil 添加 SoftReference + TTL 缓存清理
...
原代码使用永久缓存 Reflections 实例,占用大量内存且不释放。
改为:
- 使用 SoftReference 允许 GC 在内存不足时回收
- 添加 1 小时 TTL 防止长期占用
- 每次获取时自动清理过期条目
2026-05-29 00:32:02 +08:00
yukaidi
1fca578c07
fix(resource): ReqIpUtil 使用统一 Vertx 单例
...
原代码在字段级别直接创建 Vertx.vertx() 实例,
可能导致多个 Vertx 实例重复创建,浪费系统资源。
改为使用 WebClientVertxInit.get() 获取统一单例。
2026-05-29 00:31:49 +08:00
yukaidi
a83665ac44
fix(security): SecurityClassFilter 改为白名单策略
...
原黑名单策略默认放行所有类,存在安全风险。
改为白名单策略,仅允许明确安全的 Java 类被 JS 访问。
允许: java.util.*, java.time.*, java.lang 基础类型, Nashorn API
拒绝: 默认拒绝所有未在白名单中的类
2026-05-29 00:31:38 +08:00
yukaidi
21e8a370c3
fix: ShutdownHook 改为同步等待 vertx.close(),修复 JVM 提前退出导致资源未释放
...
审查发现 vertx.close() 是异步操作,ShutdownHook 线程提交关闭任务后立即退出,
JVM 在资源实际释放前就终止了,与未修复时行为等价。
改为 CompletableFuture.get(10s) 阻塞等待,超时有 warn 日志。
同时移除无用的 mainVertx 字段,修正 JsExecUtils 误导性注释。
2026-05-28 23:58:52 +08:00
yukaidi
3dd4dd139b
fix: 缓存清理异常日志级别从 debug 改为 warn,确保生产环境可见
...
审查发现数据库异常时 debug 级别会被静默吞掉,运维无法感知。
2026-05-28 23:43:07 +08:00