This commit is contained in:
张成
2026-04-01 14:16:06 +08:00
parent f810f60e3f
commit 09368d2a95
4 changed files with 1956 additions and 12 deletions

View File

@@ -5,15 +5,18 @@ const proxy = require("../service/biz_proxy_service");
/**
* 从请求中提取 Token
* 支持 Authorization: Bearer xxx 和 query ?token=xxx
* 从 ctx 请求中提取 Token(不含 query
* - Authorization: Bearer <token>
* - Authorization: <token>(无 Bearer 前缀时整段作为 token
* - X-Api-Token / X-Token
*/
function extractToken(ctx) {
const authHeader = ctx.get("Authorization") || "";
if (authHeader.startsWith("Bearer ")) {
return authHeader.slice(7).trim();
let x_token = ctx.headers['authorization'] || ''
if (x_token.startsWith("Bearer ")) {
x_token = x_token.slice(7).trim();
}
return ctx.query.token || "";
return x_token;
}
/**
@@ -26,6 +29,14 @@ function pickFeature(spec) {
return null;
}
/** 不参与转发的文档路径(与 framework 实际路由重叠或仅为说明) */
function should_skip_proxy_path(route_path) {
return (
route_path.startsWith("/admin_api") ||
route_path.startsWith("/api/auth")
);
}
/**
* 构建转发路由表(供 framework.addRoutes 注册)
*/
@@ -33,6 +44,9 @@ function buildProxyRoutes() {
const routes = {};
for (const [path, methods] of Object.entries(swagger.paths)) {
if (should_skip_proxy_path(path)) {
continue;
}
for (const [method, spec] of Object.entries(methods)) {
const routeKey = `${method.toUpperCase()} ${path}`;
@@ -51,10 +65,8 @@ function buildProxyRoutes() {
ctx.fail(authResult.message || "鉴权失败");
return;
}
// 3. 组装 query去掉 token 参数,避免泄露)
// 3. 组装 query
const query = { ...ctx.query };
delete query.token;
// 4. 转发到上游
const result = await proxy.forwardRequest({
@@ -68,7 +80,7 @@ function buildProxyRoutes() {
// 5. 根据上游 Success 字段决定响应方式
const upstream = result.data;
if (upstream && upstream.Success === true) {
if (upstream && upstream.Code === 200) {
ctx.success(upstream);
} else {
ctx.fail(upstream && upstream.Text ? upstream.Text : "上游请求失败", upstream);