trpc-group / trpc-cpp

A pluggable, high-performance RPC framework written in cpp
Other
270 stars 78 forks source link

【腾讯犀牛鸟计划】为tRPC-Cpp开发一个简单的校验器 #138

Closed weimch closed 1 month ago

weimch commented 2 months ago

issue介绍

在处理请求前后执行某些逻辑是一个常见的需求,比如,处理请求之前对请求做鉴权,处理请求之后上报处理耗时/返回码到监控系统中。trpc通过filter扩展了这个能力,任何人可以自定义一个filter,选择拦截点执行某些特定场景相关的逻辑,以达到灵活扩展功能的目的。

你需要用filter实现一个简单的校验器,通过校验trpc请求的头部是否包含某个字段来拒绝/放行请求。你需要用腾讯文档输出一份报告到issue回复里,报告需要包含你的实践过程(关键代码及日志输出等)以及你的心得体会,最后提交相关变更代码到你个人的repo以及编译运行指引到issue回复里,方便我们测试验证你的确完成了issue。

具体地,你可以按下面步骤完成此issue 1、你只需实现server filter,在埋点SERVER_PRE_RPC_INVOKE进行拦截。 2、你可以通过ServerContext的GetPbReqTransInfo方法,在服务端拿到trpc请求的头部信息,你可以通过ClientContext的AddReqTransInfo方法,在客户端增加trpc请求头部的键值对。 3、你可以用examples/helloworld进行测试,你需要改写客户端让其发送2个请求,一个包含特定头部将会被处理,一个不包含特定头部将会被拒绝。 4、【可选】你是否还能想到更多的拦截器场景,欢迎在文档中提出,如果有兴趣,你可以按自己想法来实现一个拦截器,看是否能达到你的预期效果?

参考资料

1、filter原理与开发指引:https://github.com/trpc-group/trpc-cpp/blob/main/docs/zh/filter.md

其他说明

本issue为2024犀牛鸟开源人才培养活动专属issue,仅供在校大学生参与领取 【认领issue】在研学基地"issue营地"对应issue行的M~R列抢滩报名,即视为认领成功。 【完成issue】已认领issue的同学,请同步在本issue评论区回复“已成功领取本issue”; 如7天内无提交任何进展包括不限于comment \ commit \ Pull Request,则将视为同学主动放弃issue,组委会将释放issue给下一位等候者。

maomao517 commented 2 months ago

已成功领取本issue

Heaven2024 commented 1 month ago

已成功领取本issue

Heaven2024 commented 1 month ago

已完成issue要求的步骤 相关代码在个人仓库分支validator 目录example/helloworld/validator中 测试步骤: git clone https://github.com/Heaven2024/trpc-cpp.git && git checkout validator 运行脚本 . run_validator.sh

weimch commented 1 month ago

已完成issue要求的步骤 相关代码在个人仓库分支validator 测试步骤: git clone https://github.com/Heaven2024/trpc-cpp.git && git checkout validator 运行脚本 . run_validator.sh

好的,本周验证下

Heaven2024 commented 1 month ago

提交报告 【腾讯文档】腾讯犀牛鸟计划】为tRPC-Cpp开发一个简单的校验器 https://docs.qq.com/aio/DT2N5Skp0WG5MYWFQ

weimch commented 1 month ago

验证ok,本issue由 @Heaven2024 完成