可以使用Go net / rpc检查元数据吗?

时间:2018-07-20 18:03:56

标签: go rpc

Go中RPC服务器的示例通常看起来像这样(来自https://golang.org/pkg/net/rpc/):

arith := new(Arith)
rpc.Register(arith)
rpc.HandleHTTP()
l, e := net.Listen("tcp", ":1234")
if e != nil {
    log.Fatal("listen error:", e)
}
go http.Serve(l, nil)

在将连接传递给已注册的功能之前,是否可以检查与连接关联的元数据?我想首先根据ACL检查客户端IP,API密钥和请求的功能。

编辑以添加:我意识到可以使用l.RemoteAddr()从侦听器获取远程地址-尚不清楚如何获取API密钥和请求的函数。

在函数内部,我可以获取API密钥,但不能获取客户端IP。在函数内部执行此操作并不理想,因为ACL检查样板必须在每个函数中使用。

1 个答案:

答案 0 :(得分:0)

很遗憾,我已经确定,如果不派发net / rpc并为其添加上下文功能,这是不可能的。

将上下文传递给已注册的功能似乎是一项常见功能请求;但是,根据https://golang.org/pkg/net/rpc/,“ net / rpc软件包已冻结,并且不接受新功能。”