Kong自定义插件【request-param-sequence】 KongLuarequestparam-sequence
程序员文章站
2022-04-25 17:49:00
...
1、插件作用
校验请求参数在URI中的顺序,必须按配置的参数顺序来,否则拒绝访问。
2、核心代码
3、配置使用
配置示例如下:
uri_keyword_list=>key1,key2
uri_value_list=>value1,value2
uri_param_seqkey_list=>paramKey1,paramKey2,paramKey3,paramKey4,paramKey5
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
校验请求参数在URI中的顺序,必须按配置的参数顺序来,否则拒绝访问。
2、核心代码
local function decideUriExists(uri_key,uri_value,uri_param_tab) local exists = true local args = ngx.req.get_uri_args() for i = 1, #uri_key do local each_key = uri_key[i] local each_value = uri_value[i] local http_uri_key_value = args[each_key] if (http_uri_key_value ~= nil) and (string.lower(each_value) == string.lower(http_uri_key_value)) then -- Nothing to do else return exists end end local uri_param_tab_len = #uri_param_tab local original_uri = ngx.var.request_uri local idx_tab = {} for i = 1, uri_param_tab_len do local local_uri_key=uri_param_tab[i] local http_uri_arg_value = args[local_uri_key] if (http_uri_arg_value == nil) then exists = false break end -- decide key param location and sequence local idx_begin = string.find(original_uri, local_uri_key, 1, true) if (idx_begin == nil) then exists = false break end table.insert(idx_tab,idx_begin) end if (exists == true) then for i = 1, #idx_tab do for j = i+1,#idx_tab do -- ngx.say("=i=",idx_tab[i],"=j=",idx_tab[j],"=end=") if not (idx_tab[i] < idx_tab[j]) then exists = false return exists end end end end return exists end
3、配置使用
配置示例如下:
uri_keyword_list=>key1,key2
uri_value_list=>value1,value2
uri_param_seqkey_list=>paramKey1,paramKey2,paramKey3,paramKey4,paramKey5
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力: