全局规则 高于 插件的规则

实际上,在APISIX的标准执行顺序中,全局规则的优先级低于特定路由的规则。执行顺序通常为:
Consumer级别的插件(最高优先级)
Route级别的插件
Service级别的插件
Plugin Config级别的插件
Global Rules级别的插件(最低优先级)
但是,您可以通过以下方法让全局规则优先于其他规则执行:
方法1: 使用优先级参数
在security-controller规则中,可以设置较高的priority值:

{
"plugins": {
"security-controller": {
"rules": [
{
"name": "global-security-policy",
"priority": 9999, // 设置非常高的优先级值
"conditions": [],
"actions": [...]
}
]
}
}
}

方法2: 修改APISIX全局插件执行顺序
您可以修改APISIX的插件执行顺序,在config.yaml中添加:

plugin_attr:
security-controller:
priority: -9999 # 负数优先级值使得插件更早执行

方法3: 使用early_filter功能
在security-controller.lua中实现early_filter方法,使其在常规插件执行前运行:

function _M.early_filter(conf, ctx)
-- 高优先级规则判断逻辑
-- 返回拒绝或允许
return nil -- 允许请求继续
end

方法3: 使用early_filter功能
在security-controller.lua中实现early_filter方法,使其在常规插件执行前运行:
function _M.early_filter(conf, ctx)
-- 高优先级规则判断逻辑
-- 返回拒绝或允许
return nil -- 允许请求继续
end

方法4: 利用rewrite阶段
将安全检查放在rewrite阶段而非access阶段,可以更早执行安全控制逻辑:
local phases = {
"rewrite", -- 添加rewrite阶段
"access",
"header_filter",
"body_filter",
"log",
"preread"
}

posted @ 2025-06-06 19:22  昆仑葫芦  阅读(16)  评论(0)    收藏  举报