kong网关使用pre-function插件,改写接口的返回数据

devtools/2024/12/27 10:31:40/
http://www.w3.org/2000/svg" style="display: none;">

一、背景

kong作为api网关,除了反向代理后端服务外,还可对接口进行预处理。

比如本文提及的一个小功能,根据http header某个字段的值,等于多少的时候,返回一个固定的报文。

使用到的kong插件是pre-function。

https://i-blog.csdnimg.cn/direct/16bd642fc3c143eabcdf2762db1319b1.png" alt="在这里插入图片描述" />

除了上面的场景,还适用于拒绝整个域名的访问。

二、接口的重写

根据http header中的SchoolId,当等于2747时,返回[ { “valid”: false } ];反之,返回 [ { “valid”: true } ]

https://i-blog.csdnimg.cn/direct/9d015871e9fb4a01aae7f58273851693.png" alt="在这里插入图片描述" />

下面是其Lua脚本内容:

local school_id = kong.request.get_header("SchoolId") if school_id == "2747" then return kong.response.exit(200, '[ { "valid": false } ]') else return kong.response.exit(200, '[ { "valid": true } ]') end 

验证:

  • http header 的schoolId = 2747

https://i-blog.csdnimg.cn/direct/365ca7c5bd4d4c93a2ea69298f01a2fc.png" alt="在这里插入图片描述" />

  • http header 的schoolId != 2747

https://i-blog.csdnimg.cn/direct/6da58d5a6394444a9fe491a46fc72c5b.png" alt="在这里插入图片描述" />

三、拒绝域名的请求

同样是使用pre-function插件实现。

https://i-blog.csdnimg.cn/direct/3810b7c84bf84e98a31912d16a46e8bc.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/bf239fdada9640beb07db073b09603e2.png" alt="在这里插入图片描述" />

Lua脚本内容为:

return kong.response.exit(503, '{code: 400, msg: "xx服务已下线,请联系技术支持处理!"}', {["Content-Type"] = 'application/json' }) 

经验证,域名的接口再次访问,返回报错。

https://i-blog.csdnimg.cn/direct/7885f4a586c74d35bb38056c0764b304.png" alt="在这里插入图片描述" />

四、总结

总之,kong的这款pre-function插件可以适用于许多场景,好处是灵活配置,支持lua脚本。当然,它只返回相对固定的报文,除非你使用Lua脚本去连接数据存储中间件。

不过,对于简单的一些场景够用了,这也提醒我们一点,在客户端请求接口的时候,尽量把一些标识性的字段通过http header上传上来。

比如schoolId 、 userId、 deviceId、ip等等,后期在kong网关便于读取并判断是否拦截请求。


http://www.ppmy.cn/devtools/145788.html

相关文章

MongoDB数据库安全

MongoDB数据库安全 一、身份验证 内置身份验证机制 MongoDB支持多种身份验证方式。最常见的是基于用户名和密码的身份验证。在MongoDB中,可以通过创建用户并分配角色来控制对数据库的访问。例如,在mongo shell中,可以使用use admin切换到ad…

Webpack在Vue CLI中的应用

webpack 作为目前最流行的项目打包工具,被广泛使用于项目的构建和开发过程中,其实说它是打包工具有点大材小用了,我个人认为它是一个集前端自动化、模块化、组件化于一体的可拓展系统,你可以根据自己的需要来进行一系列的配置和安…

Ubuntu vi(vim)编辑器配置一键补全main函数

1.打开对应的配置文件 vi ~/.vim/snippets/c.snippets 2.按G将光标定位到文件末尾 3.按i进入插入模式 以tab键开头插入下的内容,空行也要加 tab键 4.:wq保存退出 5.再打开任意一个新的 .c文件后,插入模式输入 main 然后按tal键就能补全了

天天 AI-241226:今日热点-OpenAI正研发实体机器人,终结者时代还是来了

2AGI.NET | 探索 AI 无限潜力,2AGI 为您带来最前沿资讯。 2AGI.NET:天天AI-20241225 AI技术正在多个领域实现突破,从实体机器人的研发到企业级生成式AI的应用趋势,再到AI安全平台的融资消息,每一项技术的发展都在推动着…

【Spring】基于XML的Spring容器配置—— <import>标签的使用

Spring容器是Spring框架的核心部分&#xff0c;负责管理应用程序中的对象及其生命周期。Spring容器的配置方式有多种&#xff0c;其中基于XML的配置方式仍然被广泛使用&#xff0c;尤其是在一些老旧项目中。本文将详细介绍Spring容器配置中的<import>标签的使用&#xff…

散斑/横向剪切/迈克尔逊/干涉条纹仿真技术分析

摘要 本博文提供了多种数据类型的干涉条纹仿真&#xff0c;并展示了它们对应的散斑干涉条纹。还分别给出了横向剪切干涉以及剪切散斑干涉条纹的仿真。 一、迈克尔逊干涉与散斑干涉仿真 下图为干涉条纹与对应的散斑干涉条纹的仿真示意图。其中&#xff0c;干涉条纹可认为是源…

cesium入门学习三

这期主要学习一下鼠标点击事件以及鼠标滚轮事件。 学习目录总结&#xff1a; cesium入门学习一-CSDN博客 cesium入门学习二-CSDN博客 1.鼠标事件 1.1 点击鼠标左键显示经度、纬度、高度 效果&#xff1a; js代码&#xff1a; var viewer new Cesium.Viewer(cesiumConta…

安卓端侧大模型MLC-LLM部署全攻略:以InternLM2.5-1.8B为例

本文来自社区投稿&#xff0c;作者&#xff1a;Tim 算法工程师 MLC-LLM 是一个机器学习编译器和高性能大型语言模型部署引擎。该项目的使命是让每个人都能在自己的平台上开发、优化和部署 AI 模型。InternLM 2.5 是上海人工智能实验室发布的新一代大规模语言模型&#xff0c;相…