【发布时间】:2019-02-14 07:39:50
【问题描述】:
为了执行授权,需要读取请求中的一些属性,以便为授权服务器进行输入
例如,这是拦截器。这里调用prepareAuthZInput 来准备输入
func AuthInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
input := prepareAuthZInput(info.FullMethod, req)
}
在这个函数中,有一个很大的 if-else 部分,它检查请求的实际类型,进行类型转换,然后执行输入准备。
func prepareAuthZInput(method string, req interface{}) {
var input Input
if methodName = "/Data/Call" {
callRequest, ok := req.(CallRequest)
if ok {
// prepare input from callRequest
}
} else if methodName = "/Data/Receive" {
receiveRequest, ok := req.(ReceiveRequest)
if ok {
// prepare input from receiveRequest
}
}
return input
}
如何改进此代码?
【问题讨论】:
-
以什么方式提高?
-
@JoaoHenrique 除了很多 if/else 块之外,还有一些通用的东西吗?
标签: go authorization grpc