diff --git a/llm_readme.txt b/llm_readme.txt new file mode 100644 index 0000000..7efd2aa --- /dev/null +++ b/llm_readme.txt @@ -0,0 +1,166 @@ +================================================================================ + LionWebsite 项目总结 +================================================================================ + +一、项目概况 +────────────────────────────────────────────────────────────────────────────── +名称: LionWebsite +技术栈: Spring Boot 3.3.2, Java 21, Maven, SQLite, MyBatis, Netty +定位: 个人/私有 Web 应用,兼具 E-Hentai 画廊下载管理、个人文件服务、 + 代理订阅管理等功能。 +运行端口: 8888 +数据库: 双 SQLite 数据库 — LionWebsite.db (主库) + cache.db (缓存库) +构建目标: 支持 GraalVM Native Image (AOT 编译) + +二、项目结构 +────────────────────────────────────────────────────────────────────────────── +src/main/java/com/lion/lionwebsite/ + +├── LionWebsiteApplication.java 主启动类 (@EnableScheduling, 双数据源 MapperScan) +│ +├── Configuration/ +│ ├── SqlConfiguration.java 双数据源 (main + cache) SQLite 配置 +│ ├── MyBatisNativeConfiguration.java GraalVM Native 适配 (AOT hints) +│ ├── WebsocketConfiguration.java WebSocket 注册 (/ws/) +│ ├── InterceptorConfiguration.java 拦截器链注册 +│ ├── CorsConfig.java CORS 全开放 +│ └── CustomBean.java Telegram Bot Bean + Native 反射注册 +│ +├── Controller/ +│ ├── GalleryManageController.java 画廊任务 CRUD、收藏、图片在线缓存 /GalleryManage +│ ├── QueryController.java E-Hentai 搜索代理 /query +│ ├── PublicController.java 根路由、IP、订阅、文件分享、验证 /、/ip、/sub/、/GetFile/、/validate +│ ├── PersonalController.java 个人文件管理 /personal/ +│ ├── SubController.java 订阅绑定管理 /personal/subBind/ +│ └── UserController.java 用户管理 /personal/user +│ +├── Service/ +│ ├── GalleryManageService.java 核心画廊管理 (任务创建/查询/删除/图片缓存/在线图片) +│ ├── RemoteService.java Netty TCP 客户端连接远程存储节点 (5.255.110.45:26321+) +│ ├── WebSocketService.java WebSocket 推送下载进度给前端 +│ ├── PushService.java Telegram Bot 通知 (admin 告警) +│ ├── QueryService.java E-Hentai 搜索 + 缩略图代理缓存 (转 AVIF) +│ ├── LocalServiceImpl.java 定时任务 (连接检测/额度重置/Cookie验证/订阅更新/缩略图清理) +│ ├── PublicServiceImpl.java IP 记录、分享码文件获取、授权码修改 +│ ├── PersonalServiceImpl.java 文件管理 (浏览/上传/下载/分享/压缩/删除/TAR打包) +│ ├── SubService.java 代理订阅绑定/重置/查询/更新记录 +│ ├── CollectService.java 画廊收藏/取消收藏 +│ └── UserServiceImpl.java 用户 CRUD + 授权码管理 +│ +├── Dao/ +│ ├── normal/ 主库 Mapper +│ │ ├── GalleryMapper.java gallery 表 CRUD +│ │ ├── UserMapper.java user 表 CRUD +│ │ ├── CollectMapper.java collect 表 CRUD +│ │ ├── ShareFileMapper.java ShareFile 表 CRUD +│ │ ├── CustomConfigurationMapper.java 配置键值对读写 +│ │ └── SubMapper.java 订阅绑定 & 更新记录 +│ └── cache/ 缓存库 Mapper +│ └── ImageCacheMapper.java 图片 key 缓存 (gidToKey + ImageKeyCache) +│ +├── Domain/ 实体类 (Lombok @Data) +│ ├── Gallery.java 画廊 (gid, name, link, pages, status, resolution, ...) +│ ├── GalleryForQuery.java 搜索结果的画廊精简信息 +│ ├── GalleryTask.java 下载任务状态 (下载中/下载完成/压缩中/压缩完成) +│ ├── User.java 用户 (id, AuthCode, username, isEnable) +│ ├── GidToKey.java 画廊 GID → MPV Key 映射 +│ ├── ImageKeyCache.java 图片 key 缓存 (gid, page, imgkey) +│ ├── CustomConfiguration.java 配置键常量定义 +│ ├── ShareFile.java 文件分享 (ShareCode, FilePath, ExpireTime) +│ ├── SubBind.java 订阅绑定 (key, user) +│ ├── SubUpdateRecord.java 订阅更新记录 (ip, UA, time, location) +│ └── PageNameCache.java 页面名缓存 (gid, page, pageName) +│ +├── Message/ 自定义 TCP 消息协议 (Netty) +│ ├── AbstractMessage.java 消息基类 (定义了 7 种消息类型常量) +│ ├── MessageCodec.java Netty ByteToMessageCodec 编解码器 +│ ├── DownloadPostMessage.java 下发下载任务 +│ ├── DownloadStatusMessage.java 下载进度状态上报 +│ ├── ResponseMessage.java 通用响应 +│ ├── DeleteGalleryMessage.java 删除画廊指令 +│ ├── IdentityMessage.java 身份认证 +│ ├── MaintainMessage.java 维护/心跳消息 +│ └── AvailableCheckMessage.java 可用性检测 +│ +├── Interceptor/ +│ ├── TaskHandlerInterceptor.java 验证 AuthCode 是否有效 (用于 /GalleryManage, /validate) +│ ├── PersonalInterceptor.java 限制 /personal/**, /remote/** 仅 AuthCode="alone" +│ └── HumanInterceptor.java 拦截无 User-Agent 的请求 (机器人防护) +│ +├── Filter/ +│ ├── AdaptorFilter.java UA 检测: 移动端重定向到 /mobile, 桌面端放行; 日志记录 +│ └── AccessFilter.java 更新用户最后访问时间 (/validate 接口) +│ +├── Util/ +│ ├── Response.java 通用 JSON 响应封装 ({result, data}) +│ ├── CustomUtil.java 工具类 (文件大小格式化/时间/空闲端口/404) +│ ├── GalleryUtil.java E-Hentai 网页解析/图片下载/MPV key 管理/图片格式转换 +│ └── FileDownload.java 支持断点续传的文件下载工具 (Range) +│ +├── Error/ +│ └── ErrorCode.java 错误码常量 (IO_ERROR=1, FILE_NOT_FOUND=2, COMPRESS_ERROR=3) +│ +└── Exception/ + └── ResolutionNotMatchException.java 分辨率不匹配异常 + +三、核心功能模块 +────────────────────────────────────────────────────────────────────────────── + +1. E-Hentai 画廊下载管理 + - 用户通过 AuthCode 提交 E-Hentai 画廊链接,指定目标分辨率 + - GalleryUtil 解析页面 (Jsoup) 获取: 名称/语言/页数/文件大小/可选分辨率 + - 通过 Netty TCP 将下载任务发往远程存储节点 (RemoteService) + - RemoteService 维护与存储节点的长连接 (自动重连+端口探测) + - 存储节点实时回传下载进度 (DownloadStatusMessage),通过 WebSocket 推送给前端 + - 支持图片在线预览: 缓存 MPV key → 按需下载单页 → 转为 AVIF 格式 + - 画廊收藏/取消收藏 + +2. 个人文件服务 + - 文件浏览器: 按路径浏览文件/文件夹,显示大小、分享状态 + - 上传: MultipartFile 上传到指定路径 + - 下载: 支持 HTTP Range 断点续传 + - 分享: 生成 8 位随机分享码,设置过期时间,可延长/取消 + - 压缩: 异步 TAR 打包目录 + - 删除文件/文件夹 + +3. E-Hentai 搜索代理 + - 代理搜索 exhentai.org,返回格式化结果 (含缩略图 URL) + - 缩略图代理: 下载 → ImageMagick 转 AVIF → 本地缓存 → 返回 + +4. 代理订阅管理 + - 定时从外部链接拉取 V2Ray/Clash 订阅配置 + - 过滤高倍率节点 (流量倍率 > 2) + - 为每个用户生成唯一订阅 Key,记录更新 IP/UA/时间/位置 + +5. Telegram 通知 + - 通过 Telegram Bot 向 admin 推送: 任务提交/完成/失败、存储节点上下线、 + Cookie 过期、订阅异常等 + +四、定时任务 (@Scheduled) +────────────────────────────────────────────────────────────────────────────── +- 每 30 分钟: 检测存储节点连接,断开则自动重连 +- 每周一 4:00: 重置每周下载额度 +- 每天 0:00: 验证 E-Hentai Cookie 有效性 +- 每天 4:00: 清理过期分享码 +- 每 24 小时: 更新代理订阅配置文件 +- 每周一 4:00: 清理缩略图缓存 (保留最近 10000 个) + +五、安全机制 +────────────────────────────────────────────────────────────────────────────── +- 所有管理接口需 AuthCode 参数 (TaskHandlerInterceptor 校验) +- /personal 和 /remote 路径限 AuthCode="alone" 用户 +- HumanInterceptor 拒绝无 User-Agent 请求 +- AdaptorFilter 记录所有请求日志 (IP/路径/UA/时间) +- 分享码失败黑名单 (连续失败则屏蔽) + +六、依赖 +────────────────────────────────────────────────────────────────────────────── +spring-boot-starter-web, spring-boot-starter-websocket, mybatis-spring-boot-starter +jsoup (HTML 解析), hutool-all (工具集), sqlite-jdbc (数据库) +httpclient + httpmime (HTTP 请求), commons-compress (TAR 打包) +commons-io, commons-lang3, netty-all (TCP 通信) +java-telegram-bot-api (Telegram Bot), graalvm native-maven-plugin (AOT) + +================================================================================ + End of Summary +================================================================================