spring:
|
cloud:
|
gateway:
|
routes:
|
# 认证中心
|
- id: jnpf-oauth
|
uri: lb://jnpf-oauth
|
predicates:
|
- Path=/api/oauth/**
|
filters:
|
- StripPrefix=2
|
# 系统基础服务
|
- id: jnpf-system
|
uri: lb://jnpf-system
|
predicates:
|
- Path=/api/system/**
|
filters:
|
- StripPrefix=2
|
# lims 业务服务
|
- id: jnpf-lims
|
uri: lb://jnpf-lims
|
predicates:
|
- Path=/api/lims/**
|
filters:
|
- StripPrefix=2
|
# lims 兼容路由:前端 dist 与 DB 数据接口仍用 /api/extend/**(69 处硬编码),
|
# 退役条件见 docs/superpowers/specs/2026-07-18-eln-module-design.md §7
|
- id: jnpf-lims-legacy
|
uri: lb://jnpf-lims
|
predicates:
|
- Path=/api/extend/**
|
filters:
|
- StripPrefix=2
|
# eln 业务服务(空壳占位,profile 起用)
|
- id: jnpf-eln
|
uri: lb://jnpf-eln
|
predicates:
|
- Path=/api/eln/**
|
filters:
|
- StripPrefix=2
|
# 审计追踪(2026-08-11 搬入 jnpf-biz-common,cx-audit 退役)。
|
# **路由与前缀刻意保持不变**:uri 直接指向 biz-common,/api/audit/** 继续可用,
|
# 前端与 42 个回归脚本零改动。审计能力因此有两条入口——本条与下面的 /api/biz/**,
|
# 都落到同一个服务,不冲突。
|
- id: jnpf-audit
|
uri: lb://jnpf-biz-common
|
predicates:
|
- Path=/api/audit/**
|
filters:
|
- StripPrefix=2
|
# 公共业务能力聚合服务(统一前缀 /api/biz/**:新增能力零网关改动,
|
# 形如 /api/biz/onlyoffice/xxx → StripPrefix=2 → 服务内 /onlyoffice/xxx)
|
- id: jnpf-biz-common
|
uri: lb://jnpf-biz-common
|
predicates:
|
- Path=/api/biz/**
|
filters:
|
- StripPrefix=2
|
# DMS 文档管理服务
|
- id: jnpf-dms
|
uri: lb://jnpf-dms
|
predicates:
|
- Path=/api/dms/**
|
filters:
|
- StripPrefix=2
|
# 报表服务
|
- id: jnpf-datareport
|
uri: lb://jnpf-datareport
|
predicates:
|
- Path=/api/datareport/**
|
filters:
|
- StripPrefix=2
|
# 🔴 表单外链专用路由(2026-08-11 平台聚合)。**必须排在下面 jnpf-visualdev 通用路由之前**
|
# ——网关按配置顺序取第一个匹配项,放到后面就永远匹配不到。
|
# 起因:聚合后 visualdev 的 ShortLinkController 与 message 的在同一 JVM 内路径相撞
|
#(详见 VisualdevShortLinkController 类注释),故把它的内部路径改名为 /VisualdevShortLink。
|
# 这里用 RewritePath 原样重写,保证**对外路径 /api/visualdev/ShortLink/** 一字不变**,
|
# 已生成并发出去的表单外链继续有效。正则里 (?<segment>/?.*) 的可选斜杠是为了让
|
# PUT /api/visualdev/ShortLink(无尾段)也能正确重写成 /VisualdevShortLink。
|
- id: jnpf-visualdev-shortlink
|
uri: lb://jnpf-visualdev
|
predicates:
|
- Path=/api/visualdev/ShortLink/**
|
filters:
|
- RewritePath=/api/visualdev/ShortLink(?<segment>/?.*), /VisualdevShortLink$\{segment}
|
# 可视化开发服务
|
- id: jnpf-visualdev
|
uri: lb://jnpf-visualdev
|
predicates:
|
- Path=/api/visualdev/**
|
filters:
|
- StripPrefix=2
|
# 工作流服务
|
- id: jnpf-workflow
|
uri: lb://jnpf-workflow
|
predicates:
|
- Path=/api/workflow/**
|
filters:
|
- StripPrefix=2
|
# 文件服务
|
- id: jnpf-file
|
uri: lb://jnpf-file
|
predicates:
|
- Path=/api/file/**
|
filters:
|
- StripPrefix=2
|
# 多租户
|
- id: jnpf-tenant
|
uri: lb://jnpf-tenant
|
predicates:
|
- Path=/api/tenant/**
|
filters:
|
- StripPrefix=2
|
# 消息
|
- id: jnpf-message
|
uri: lb://jnpf-message
|
predicates:
|
- Path=/api/message/**
|
filters:
|
- StripPrefix=2
|
# 任务调度
|
- id: jnpf-scheduletask
|
uri: lb://jnpf-scheduletask
|
predicates:
|
- Path=/api/scheduletask/**
|
filters:
|
- StripPrefix=2
|
# 权限
|
- id: jnpf-permission
|
uri: lb://jnpf-permission
|
predicates:
|
- Path=/api/permission/**
|
filters:
|
- StripPrefix=2
|
# 大屏
|
- id: jnpf-visualdata
|
uri: lb://jnpf-visualdata
|
predicates:
|
- Path=/api/blade-visual/**
|
filters:
|
- StripPrefix=2
|
# app
|
- id: jnpf-app
|
uri: lb://jnpf-app
|
predicates:
|
- Path=/api/app/**
|
filters:
|
- StripPrefix=2
|
# 工作流表单
|
- id: jnpf-flowForm
|
uri: lb://jnpf-flowForm
|
predicates:
|
- Path=/api/flowForm/**
|
filters:
|
- StripPrefix=2
|
|
|
#接口放行地址 与GatewayWhite中的默认URL合并
|
gateway:
|
#禁止访问
|
block-url:
|
# 审计写端点 /Internal/** 只供服务间 Feign 调用(直连 lb://jnpf-audit,不经网关);
|
# 经网关的外部请求一律 AD101 禁止访问,堵任意登录用户伪造投递审计事件(append-only 完整性)。
|
# AuthFilter 的 block 检查在鉴权链最前、匹配的是 StripPrefix 前原始路径 /api/audit/Internal/**。
|
# 服务侧 AuditInternalController 另有 SA-SAME-TOKEN 校验兜底(双保险,见该类注释)。
|
- /api/audit/Internal/**
|
# Discovery Locator 自动路由标准路径:bootstrap-dev.yml discovery.locator.enabled=true +
|
# lowerCaseServiceId=true 会为每个注册服务生成 /jnpf-audit/**,绕过上面的 /api/audit/** 前缀 →
|
# 补堵其 /Internal 写端点标准路径(小写服务名,与 lowerCaseServiceId 生成形态一致)。
|
# 大写变体 /JNPF-AUDIT/Internal/** 实测在下游 Spring MVC 因路径大小写敏感 404(不达 record()),
|
# 双斜杠变体经平台"非法请求"过滤器拦截,均不落库;服务侧 SAME-TOKEN 是权威边界,此处只覆盖数据面标准路径。
|
- /jnpf-audit/Internal/**
|
# DMS Internal 端点仅允许服务间直连;服务侧仍必须校验 SA-SAME-TOKEN。
|
- /api/dms/Internal/**
|
- /jnpf-dms/Internal/**
|
# 🔴 2026-08-11 audit 搬入 jnpf-biz-common 后**新增的两条到达路径**,缺一条就是绕过缺口:
|
# · /api/biz/Internal/** —— biz-common 的对外前缀 /api/biz/** 同样 StripPrefix=2,
|
# `/api/biz/Internal/audit/events` 去掉两段后正是服务内的 `/Internal/audit/events`;
|
# · /jnpf-biz-common/Internal/** —— Discovery Locator 按新服务名生成的标准路径
|
# (原 /jnpf-audit/** 那条仍需保留:discovery.yaml 里 jnpf-audit 作为别名依然注册)。
|
# 设计文档 2026-08-07-biz-common-design.md §4.2 预先写明了"出现 Internal 端点必须同时加两条",
|
# 这里是它第一次真正生效。
|
- /api/biz/Internal/**
|
- /jnpf-biz-common/Internal/**
|
#不验证Token, 记录访问
|
white-url:
|
# OnlyOffice 编辑保存回调(平台补丁 #9):DS 既不是 JNPF 服务(注入不了 SA-SAME-TOKEN)
|
# 也无登录态,直连服务端口按 L042 必被 inner-auth 拒,故只能经网关且必须放行。
|
# 放行不等于裸奔——转发阶段的 MvcSecurityConfig#getMyHeadersFilter 与白名单相互独立,
|
# 仍会注入 INNER_GATEWAY_TOKEN;真正的安全边界是服务侧对 OnlyOffice 回调 JWT 的验签。
|
# ⚠️ 只放行 callback 这一条精确路径,不可扩成 /api/biz/onlyoffice/**
|
# (config 端点会下发 securityKey,必须保持登录态保护)。
|
- /api/biz/onlyoffice/callback
|
# ELN 模板填写数据:无登录 token,安全边界是端点内部的 8 小时专用 Ticket 校验。
|
- /api/eln/onlyoffice/template-fill/data
|
#- /api/message/Notice
|
#- /api/permission/Users/*
|
#放行不记录
|
exclude-url:
|
#禁止访问地址的白名单IP
|
white-ip:
|
#- 192.168
|