go - 有没有办法在 go 中读取服务器应用程序内的 IP 连接标头?
问题描述
服务器应用程序支持身份验证,该身份验证要求与其连接的客户端提供用户名和密码。机器内部也可能有一个客户端,我不希望对其进行身份验证。同一台机器中的客户端使用 LOOPBACK 地址与服务器连接。我想要的是,如果我能以某种方式为 gRPC 连接的目标 IP 应用过滤器并决定是否应用身份验证。有办法吗?谢谢 !
func (s *RShellServer) ExecCmd(stream RShell_ExecCmdServer) error {
# For example, something like this if condition.
if (Conn().destination_ip != LOOPBACK) {
if err, ok := gnmi.AuthorizeUser(stream.Context()); !ok {
return fmt.Errorf("%s", err)
}
}
req, err := stream.Recv()
if err != nil {
return fmt.Errorf("Error reading request: %s", err)
}
}
解决方案
你的 GRPC 服务应该是这样的
func (MyServer) SomeFunction(ctx context.Context,
req *myserver.Request) (resp *myserver.Response, err error)
然后你可以使用对等库并从上下文中提取对等信息,如`
p, err := peer.FromContext(ctx)
并使用从对等方获取地址
p.Addr
推荐阅读
- javascript - React DropDown列表值选择中的问题
- php - 通过参数函数返回替代数字基数
- javascript - 为元素分配顺序编号
- xml - 一致地调用 unattend.xml 中的 USB 驱动器来运行 netsh wlan add profile path
- r - 在比较年份时如何将种族添加为堆叠数据
- linkedin - 通过 API 发布文章时不显示 URL 图片
- highcharts - 如何使用数据库数据集构建 HighCharts 组织结构图
- python - 如何验证护照。有人能帮我吗?
- laravel - SQ 服务器的 Laravel Excel 错误。将数据类型 nvarchar 转换为 bigint 时出错
- python - 在 matplotlib 和 seaborn 上,如何将 kdeplot 上的 y 轴切换为测量计数而不是测量密度?