`
can_do
  • 浏览: 262542 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Kong自定义插件【request-param-sequence】

阅读更多
1、插件作用
校验请求参数在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

【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:

分享到:
评论

相关推荐

    spring配置中<context-param> 和<init-param>的 区别

    &lt;param-value&gt;/WEB-INF/spring/appServlet/servlet-context.xml&lt;/param-value&gt; &lt;/context-param&gt; ``` 在这个例子中,`contextConfigLocation` 参数指定了Spring配置文件的位置,使得Servlet容器知道在哪里加载...

    <context-param>与<init-param>的区别与作用

    &lt;param-name&gt;paramName&lt;/param-name&gt; &lt;param-value&gt;paramValue&lt;/param-value&gt; &lt;/context-param&gt; ``` `param-name`是参数的唯一标识,`param-value`是对应的值。`&lt;context-param&gt;`通常用于设置Spring框架的配置...

    web.xml中&lt;/context-param&gt;等配置的作用

    web.xml中&lt;context-param&gt;等配置的作用 了解 web.xml 的配置信息和加载顺序对于理解框架的流程至关重要。在 web.xml 中,&lt;context-param&gt; 配置起着非常重要的作用,它在 web 项目启动时发挥着关键的作用。 首先,...

    解析web.xml中在Servlet中获取context-param和init-param内的参数

    在这里,`&lt;param-name&gt;`标签定义了参数名,`&lt;param-value&gt;`标签定义了参数值。要从Servlet中获取`context-param`,可以通过以下代码实现: ```java String contextParamValue = getServletContext()....

    Laravel开发-laravel-query-param

    在Laravel框架中,`laravel-query-param`通常指的是如何在路由、控制器和查询构建器中处理URL查询参数。Laravel提供了优雅的方式来处理HTTP请求,包括查询参数,这对于开发高效和用户友好的API或者Web应用至关重要。...

    前端开源库-jquery-param-fn

    `jquery-param-fn` 提供了更灵活的接口,允许开发者自定义序列化函数。这可以让你按照特定的格式处理参数,比如在处理嵌套的对象或者数组时,可以定制它们的键值对形式。此外,这个库可能还支持处理特殊类型的数据,...

    Java自定义异常案例--ExceptionManager(java源码)

    * @param throwable the cause which has been caught. It's detail message and * stacktrace are the parts the information will be shown. */ public ExceptionManager(Throwable throwable){ ...

    前端开源库-jquery-param-fn.zip

    `jquery-param-fn.zip`这个压缩包可能包含了一个与jQuery相关的函数,用于处理参数序列化,这在进行Ajax请求时特别有用。在前端与服务器进行异步数据交换时,通常需要将对象或数组转换为URL查询字符串格式,`jQuery....

    Laravel开发-laravel-query-param .zip

    public function handle(Request $request) { $keyword = $request-&gt;input('keyword'); $category = $request-&gt;input('category'); // 进行搜索操作,例如: $results = Model::where('keyword', $keyword)-&gt;...

    npm-login-with-param:使用提供的参数登录到npm

    npm使用参数登录 一个简单的脚本,可从命令行登录npm,以防您没有交互式外壳, expect或其他任何花哨的东西。 该软件包允许您为登录过程提供参数,...npx npm-login-with-param 这个怎么运作 这是一个简单的子进程,

    Laravel开发-normalization-request-uri

    总的来说,`Laravel开发-normalization-request-uri`关注的是如何确保Laravel框架能够正确处理各种格式的请求URI,保证路由到正确的控制器和方法,提供一致的用户体验。通过对`normalization-request-uri-master`...

    Product.insert-product-param

    在IT行业中,"Product.insert-product-param" 这个标题很可能是指一个特定的产品管理系统的API接口,用于插入新的产品参数。这个接口可能是系统的核心功能之一,允许开发者或系统管理员向产品数据库中添加新产品或...

    jquery-param:与jQuery.param等效的功能

    jQuery参数产品特点等效于jQuery.param(基于jQuery 3.x) 没有依赖关系通用(同构) ES模块支持安装Node.js: npm install jquery-param --save 浏览器: &lt; script src =" /path/to/jquery-param.min.js " &gt; ...

    tomcat解决跨域访问问题配置

    &lt;param-value&gt;token,Access-Control-Allow-Origin,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers&lt;/param-value&gt; --&gt; &lt;param-value&gt;Access-Control...

    单输入和多输入时的onnx,将cam-param作为外部参数传入时有inverse算子

    在这个特定的场景中,提到的"将cam-param作为外部参数传入"涉及到了在ONNX模型中使用自定义参数,特别是相机参数,这在计算机视觉任务中非常常见。 相机参数(cam-param)通常包括内参矩阵、外参矩阵等,用于描述...

    node-request-slim

    $ npm install node-request-slim 测试 # 启动测试服务器 $ node test/server/app.js # 测试 $ mocha 参数 /** * @param {String || Object} options 必选,如果是string类型就认为是url * @param {String} ...

Global site tag (gtag.js) - Google Analytics