Closed weimch closed 1 month ago
已成功领取本issue
已成功领取本issue
已完成issue要求的步骤 相关代码在个人仓库分支validator 目录example/helloworld/validator中
测试步骤:
git clone https://github.com/Heaven2024/trpc-cpp.git && git checkout validator
运行脚本
. run_validator.sh
已完成issue要求的步骤 相关代码在个人仓库分支validator 测试步骤:
git clone https://github.com/Heaven2024/trpc-cpp.git && git checkout validator
运行脚本. run_validator.sh
好的,本周验证下
提交报告 【腾讯文档】腾讯犀牛鸟计划】为tRPC-Cpp开发一个简单的校验器 https://docs.qq.com/aio/DT2N5Skp0WG5MYWFQ
验证ok,本issue由 @Heaven2024 完成
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给下一位等候者。