Commit Graph
27 Commits
Author SHA1 Message Date
chenxing f456c85702 feat(gateway): 入口分流 + ANON 豁免接线,退役 admin.html 治理小页
build / build-push (push) Successful in 1m10s
判定接线(SignVerifyFilter 拆三段,内部入口逻辑逐字节不变):
- 内部入口(容器网直连,无标记)一律验签,不看 visibility/authMode
- 外部入口(来源可信 + X-Entry: external)→ INTERNAL 裸 403;EXTERNAL×SIGNED 验签;
  EXTERNAL×ANON 限流内免签放行(verdict=ANON / caller=anonymous / 不注入身份头),
  超限 429、限流未就绪 403(fail-closed)
- 外部入口的 403/429 属策略层拒绝,与 observe 正交

新增:
- auth/EntryDetector:可信来源 CIDR + X-Entry 双条件判定,仅认 IPv4,非法一律不可信
- auth/AnonRateLimiter:ALLOW/EXCEEDED/UNAVAILABLE 契约
- auth/UnavailableAnonRateLimiter:T3.1 前的占位实现,恒 fail-closed
- route/RouteChangeBroadcaster:频道 gw:route:version 变更广播(判定仍读本地 Caffeine,
  Redis 只做变更通知,Redis 异常回落本地快照,不存在“挂了就放行”)

其他:
- GatewayProperties 新增 trusted-proxies / anon-per-ip-qps
- StreamingForwarder 把 x-entry 加入剥除集(伪造值也到不了提供方)
- InternalAdminController 白名单 {SIGNED,ANON}、删 page()、写后广播;RouteRefreshController 广播
- 硬删 static/admin.html(治理面已前端化,重载注册表由 front 头部按钮承接)
- 测试:EntryDetectorTest、SignVerifyFilterEntryTest(入口×策略矩阵)等,101/101 全绿
2026-09-24 10:30:14 +08:00
chenxing a19ded48ef feat(ctx): SanitizeFilter 剥 context-path,业务路径空间与 ctx 解耦(ctx 为空零行为变化)
build / build-push (push) Successful in 47s
2026-09-23 16:50:34 +08:00
chenxing 2389d2fa9a feat(admin): 管理面信封化+分页化,OpenAPI 文档端点旁路(B1-B6)
build / build-push (push) Successful in 1m59s
- pom: 引 yh-platform-dependencies(import) / yh-api-std / springdoc-openapi-ui 1.7.0 + nexus-public 仓库
- RoutingFilter.isGatewayInternal: /v3/api-docs、/swagger-ui/**、/swagger-ui.html 纳入自身路径旁路,避免被 TargetRouter 当 target 裸 404
- InternalAdminController: page/routes/targets/logs 三接口分页化返回 BasePageResult;补 @Operation(operationId=GatewayAdmin.*);错误契约去 @ResponseStatus(400) 改 200+code=2;logs 兼容旧 limit 入参
- RouteRefreshController: 补 @Tag/@Operation(operationId=GatewayAdmin.refresh)
- static/admin.html: 适配 {code,msg,data} 信封与 content/total 分页
- InternalAdminControllerTest: 重写 12 用例,77 项测试全绿
2026-09-23 12:17:02 +08:00
chenxing 6e64acc0c7 fix(config): 本地兜底端口 10010→10013,更正陈旧注释(B3,v1.2 §8-L5 收编)
build / build-push (push) Successful in 46s
2026-09-23 11:42:42 +08:00
chenxing 3887892d4d feat(ops): 对齐平台日志策略——新增 logback-spring.xml(app.log 按天滚动/30天/5GB,root INFO)
build / build-push (push) Successful in 46s
此前无自定义 logback,走 Spring Boot 默认文件日志(spring.log 10MB 大小滚动、
仅留 7 天);现与 Notice/UserBase 一致:/app/logs/app.log 按天滚动。
日志级别由平台配置层管理(application-platform.yml root=INFO);私有配置中的
logging.level.root=DEBUG/show-sql 调试遗留已同步清除。
2026-09-23 09:46:53 +08:00
chenxing ce4c3cc5a6 feat(admin): 治理小页完整前端——路由/目标行内编辑+台账查询
build / build-push (push) Successful in 51s
单文件 vanilla JS 零外部依赖:路由表六旋钮下拉/数字输入+行保存(值域即下拉白名单),
目标表 base_url+启停,台账三筛选+status 着色,顶部注册表热重载;错误 toast 不打断。
2026-09-23 00:13:43 +08:00
chenxing 06b0f4ed23 feat(admin): 网关治理小页后端——路由/目标/台账查询与行内编辑
/api/internal/admin/**(RoutingFilter 旁路前缀,零过滤器改动):
- GET page(routes/targets/logs) + PUT routes/{id} / targets/{id}
- 值域白名单(visibility/authMode/cacheScope)非法 400 不落库;写后热重载注册表
- OpenApiLogRepository.pageLatest 两可空过滤+倒序分页
- 10 用例(page/列表/合法编辑/三态 400/limit 截断),全量 75/75 绿
2026-09-23 00:12:17 +08:00
chenxing 50f9948b49 E11: open_api_target 表与 DB>yml 地址解析
build / build-push (push) Successful in 1m39s
target base-url 由 open_api_target 快照优先解析,无行/禁用行/空白地址行回落
yml yh.gateway.routes;/api/internal/routes/refresh 同时重载两表。
2026-09-22 10:14:46 +08:00
chenxing 1d354face9 E04a: /actuator/** 纳入网关自身端点旁路(探活不被 oapi 链裸 404)
build / build-push (push) Successful in 1m6s
projman 探活口径 = {ctx}/actuator/health 且只认 HTTP 200;网关原先只旁路
/api/internal/**,健康探针被 TargetRouter 判未知 target 裸 404 → HealthGuard
连续失败会周期性 restart,E05/E06 的 health=200 验收也不可能达成。
台账/验签/转发四处共用同一判定,故一处改动即全链生效。
2026-09-22 09:25:07 +08:00
chenxing 0545de48a8 E02: 注册表初版 cms 行修正为 yschcms(对齐 160 实测 ctx)
build / build-push (push) Successful in 1m37s
2026-09-22 09:08:22 +08:00
chenxing 3d50bac106 fix: 去掉 pom finalName=app(jar 已命名 app.jar 致 CI 'cp *.jar app.jar' 同文件拷贝失败;对齐平台约定:maven 产 artifactId-version.jar,由 CI 拷成 app.jar)
build / build-push (push) Successful in 55s
2026-09-21 10:53:16 +08:00
chenxing 4de8eda227 merge: 合并 projman 初始化的远端仓库(CI 文件以远端为准:.gitea/workflows + docker/Dockerfile;README 保留项目文档)
build / build-push (push) Failing after 16s
2026-09-21 10:47:16 +08:00
admin b9aa61ea11 ci: init Dockerfile [skip ci] 2026-09-21 10:29:53 +08:00
admin aa3564d291 ci: init build workflow [skip ci] 2026-09-21 10:29:52 +08:00
admin 8db4e8d77f Initial commit 2026-09-21 10:29:45 +08:00
chenxing 10374abd6d T1.6: 观察模式开关 + Filter 链组装(链序定型 台账0→Sanitize1→Routing2→SignVerify3→身份注入4(转发器内)→Dispatch5;/api/internal/** 三环旁路直达 controller;observe=true 坏签名放行、false 裸401 集成对照;400/404 协议层错误不受 observe 影响;关掉 starter AppAuthFilter(正确键 yh.app-auth.enabled=false)避免抢链首误 401) 2026-09-21 09:45:52 +08:00
chenxing 28b9bfca3c T1.5: 台账异步落库(ArrayBlockingQueue(10000) offer 不阻塞;满200/500ms 单线程批量 saveAll+按日 upsert;队满原子计数+ERROR 不抛;关停 flush 余量;hibernate batch_size=200) 2026-09-21 09:29:48 +08:00
chenxing 26f5787000 T1.4: 身份头注入 X-Caller-App-Key(verdict=PASS 才注入验签 appKey;注入点在伪造头剥除之后,FAIL/ANON 不注入;四用例绿) 2026-09-21 09:25:13 +08:00
chenxing cdc4396ec2 T1.3: StreamingForwarder 流式转发(AsyncContext+HttpClient 零缓冲透传;剥 hop-by-hop 与伪造 X-Caller-App-Key、签名头四件原样;超限裸413/连接失败裸502/超时裸504) 2026-09-21 09:22:07 +08:00
chenxing 58a1bb5358 T1.2: SignVerifyFilter v1(canonical 剥 target 首段+解码排序 query,复用 starter SignUtil ±5min;observe 只记不拦/非 observe 裸 401;共享向量为 starter 真实代码执行产出 v1.json 逐字节对拍) 2026-09-21 09:13:18 +08:00
chenxing 949296eb67 T1.1: SanitizeFilter 请求规整化(解码检查 ..///控制字符裸 400,只拒不修;attribute 契约 sanitized.uri/stripped.path) 2026-09-21 00:34:11 +08:00
chenxing a45a180008 T0.13: 全平台 oapi 盘点产出注册表初版 02_init_routes.sql(22 条前缀聚合,全最保守形态) 2026-09-21 00:32:36 +08:00
chenxing 4777d47499 T0.12: GatewayProperties 路由表 + TargetRouter(/{target}/oapi/** 路由判定与 forwardUrl 换主机不换路径计算) 2026-09-21 00:25:54 +08:00
chenxing 6cb0fa1b5b T0.11: GatewayKeyService 薄封装复用 starter SignKeyResolver(四态 fail-closed);显式引 data-redis(starter 标 optional 不传递) 2026-09-21 00:24:02 +08:00
chenxing d4bfe8a3b4 T0.10: RouteRegistry Caffeine 装载/判定(精确优先+/**通配+最严默认)与 /api/internal/routes/refresh 2026-09-21 00:21:28 +08:00
chenxing 06a02750b0 T0.9: 注册表三表 DDL(01_schema.sql) + JPA 实体/Repository + H2 MODE=MySQL round-trip 与唯一约束测试 2026-09-21 00:20:01 +08:00
chenxing f10343a4c1 T0.8: open-gateway 建仓——Spring Boot 2.7.18/JDK8 骨架 + EnvelopeWriter(裸码/信封两形态,信封与 SDK OpenApiEnvelope 字段对齐)+ CI/Dockerfile/.dockerignore 2026-09-21 00:17:49 +08:00