go-kratos / kratos

Your ultimate Go microservices framework for the cloud-native era.
https://go-kratos.dev
MIT License
23.3k stars 4.01k forks source link

Whitelist: selector middleware doesn't work for grpc #3376

Open akoserwal opened 3 months ago

akoserwal commented 3 months ago

What happened:

As shown for HTTP middleware the selector middleware works, but not the case with grpc https://github.com/go-kratos/beer-shop/blob/a29eae57a9baeae9969e9a7d418ff677cf494a21/app/shop/interface/internal/server/http.go#L41

How to reproduce it (as minimally and precisely as possible):

Adding selector middleware as shown https://github.com/go-kratos/beer-shop/blob/a29eae57a9baeae9969e9a7d418ff677cf494a21/app/shop/interface/internal/server/http.go#L41 for grpc middleware

Anything else we need to know?:

https://github.com/go-kratos/kratos/blob/main/middleware/selector/selector.go#L92

Selector middleware works for unary, server streaming . but it doesn't work in case of "bidirectional streaming rpc". I was using grpcurl commandline utility which by default uses bidirectional streaming rpc.

operation := info.Operation() value of the operation in case of grpc would give grpc.reflection.v1.ServerReflection/ServerReflectionInfo which doesn't give info about method called.

Environment:

shenqidebaozi commented 3 months ago

@akoserwal grpc.reflection.v1.ServerReflection/ServerReflectionInfo is a streaming RPC that has been previously discussed and cannot be overwritten by middleware at this time. I will also carefully review the previous communication recently.