[ISSUE #3949] AddHeader in AuthenticationInterceptor

This commit is contained in:
zhouxiang
2022-07-13 11:29:32 +08:00
parent 26b2098672
commit 56c393f00c
2 changed files with 16 additions and 1 deletions
@@ -25,8 +25,10 @@ import io.grpc.ServerCall;
import io.grpc.ServerCallHandler;
import io.grpc.ServerInterceptor;
import java.util.List;
import org.apache.rocketmq.acl.AccessResource;
import org.apache.rocketmq.acl.AccessValidator;
import org.apache.rocketmq.acl.common.MetadataHeader;
import org.apache.rocketmq.acl.plain.PlainAccessResource;
import org.apache.rocketmq.proxy.grpc.v2.adapter.RequestMapping;
public class AuthenticationInterceptor implements ServerInterceptor {
@@ -56,10 +58,20 @@ public class AuthenticationInterceptor implements ServerInterceptor {
.requestCode(RequestMapping.map(messageV3.getDescriptorForType().getFullName()))
.build();
for (AccessValidator accessValidator : accessValidatorList) {
accessValidator.validate(accessValidator.parse(messageV3, metadataHeader));
AccessResource accessResource = accessValidator.parse(messageV3, metadataHeader);
addHeader(headers, messageV3.getDescriptorForType().getFullName(), accessResource);
accessValidator.validate(accessResource);
}
super.onMessage(message);
}
};
}
protected void addHeader(Metadata headers, String rpcName, AccessResource accessResource) {
headers.put(InterceptorConstants.RPC_NAME, rpcName);
if (accessResource instanceof PlainAccessResource) {
PlainAccessResource plainAccessResource = (PlainAccessResource) accessResource;
headers.put(InterceptorConstants.AUTHORIZATION_AK, plainAccessResource.getAccessKey());
}
}
}
@@ -65,4 +65,7 @@ public class InterceptorConstants {
public static final Metadata.Key<String> CLIENT_ID
= Metadata.Key.of("x-mq-client-id", Metadata.ASCII_STRING_MARSHALLER);
public static final Metadata.Key<String> AUTHORIZATION_AK
= Metadata.Key.of("x-mq-authorization-ak", Metadata.ASCII_STRING_MARSHALLER);
}