当前位置: 首页 > news >正文

A tour of gRPC:09 - gRPC Interceptor 拦截器

在上一篇中,我们体验了 gRPC 的反射和拦截器功能,并尝试使用evans 客户端对接口进行了测试。在 本篇中,我们将体验 拦截器功能,拦截器就像一个中间件功能。

​拦截器可以在server和client上添加,服务端拦截器会在实际方法被调用前先执行,它有多种用途,例如:日志记录,跟踪,速率限制,身份验证和授权。同样,客户端拦截器会在实际调用发起前先执行。

接下来我们来测试一下

1. 在 server/main.go 上添加 一个简单的一元拦截器做测试、一个流拦截器做测试

​2. 运行服务端和客户端测试

​可以看到 server 上添加的 unary 拦截器成功运行了,接下来我们不妨做点更有意思的!

  • 实践一下!

我们在我们的系统上增加一个用户登录并返回JWT访问令牌的方式

1. 在service包下添加 User.go 实体

​2. 接下来,在 service\user_store.go 中创建一个用于存储用户信息的类

​3. 接着,实现一个 JWT 管理器来为用户生成 和验证访问令牌

​4. 新增一个 auth_service.proto

​5. 在 service 包下新建 auth_server.go 负责认证和登录

​6. 在 server/main.go 中添加 userStore内容

​7. 添加一个 service/auth_interceptor.go

​8. 在server/main.go 中添加几个种子用户,并把上面的拦截器注册到server上

​9. 接下来我们来实现客户端登录携带token的操作,新增一个 client/auth_client.go

​10. 接下来我们实现一个客户端拦截器 auth_interceptor.go 目的是在调用服务器方法之前,拦截 所有 gRPC 请求,并为其添加访问令牌

​11. 将之前 main/client.go 中的逻辑,抽到新建的 client/laptop_client.go 中

​12. 重构一下 main/client.go

​修改 makefile

​好了,我们接下来进行一个小测试,看我们的拦截器是否起到了身份验证和鉴权,我们先用一个user 权 限的账号(种子用户设置在 server/main.go 中) 尝试进行 createLaptop。

​可以看到,提示了权限不足,接下来我们换用一个 admin 权限的账号

​创建成功!可以看到拦截器的运行符合预期。



 

相关文章:

  • 【Docker】——Network
  • Vue3如何实现全屏模式
  • 新型数据中心网络安全体系研究
  • Android获取手机电压,电流,电量,BatteryManager
  • 光纤通信数字孪生系统架构及关键技术研究
  • 数据结构与算法复习:第三十四弹
  • 元宇宙会场APP功能系统软件源码开发
  • 【反诈拒赌 支付在行动】涉赌资金转移典型案例及风险提示
  • 【Python黑科技】把秘密写在照片里(保姆级图文+实现代码)
  • OpenGL ES学习(7)——混合
  • Spoon Kettle 连接之记录集连接详解(Merge join)
  • 光传送网管控融合研究与智能化演进思考
  • 应对三大行业痛点,利尔达用芯打造智能换电系统平台
  • RedHat Linux修改SSHD默认22端口
  • Docker: hello world
  • 深入了解以太坊
  • 收藏网友的 源程序下载网
  • extjs4学习之配置
  • gulp 教程
  • iOS编译提示和导航提示
  • Java Agent 学习笔记
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript对象详解
  • 给第三方使用接口的 URL 签名实现
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端存储 - localStorage
  • 实现简单的正则表达式引擎
  • 消息队列系列二(IOT中消息队列的应用)
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • !!java web学习笔记(一到五)
  • (7)STL算法之交换赋值
  • (C语言)逆序输出字符串
  • (C语言)球球大作战
  • (LeetCode) T14. Longest Common Prefix
  • (阿里云万网)-域名注册购买实名流程
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)计算机毕业设计高校学生选课系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (篇九)MySQL常用内置函数
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)memcache、redis缓存
  • (转)详解PHP处理密码的几种方式
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • /bin/rm: 参数列表过长"的解决办法
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [8481302]博弈论 斯坦福game theory stanford week 1