Bladeren bron

grpc拦截器测试

tags/v1.1.0
SmallChi 6 jaren geleden
bovenliggende
commit
3e0c5fa865
8 gewijzigde bestanden met toevoegingen van 85 en 221 verwijderingen
  1. +15
    -0
      src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcProtocol/Extensions/ErrorExtensions.cs
  2. +30
    -0
      src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcProtocol/Extensions/ServerCallContextExtensions.cs
  3. +0
    -6
      src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcProtocol/JT808AtomicCounterService.proto
  4. +17
    -192
      src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcProtocol/csharp/JT808AtomicCounterService.cs
  5. +4
    -18
      src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcServer/GrpcImpls/JT808AtomicCounterServiceGrpcImpl.cs
  6. +9
    -3
      src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcServer/Interceptors/DemoInterceptor.cs
  7. +9
    -1
      src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcServer/Program.cs
  8. +1
    -1
      src/JT808.DotNetty.Dashbord.sln

+ 15
- 0
src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcProtocol/Extensions/ErrorExtensions.cs Bestand weergeven

@@ -0,0 +1,15 @@
using Grpc.Core;
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.DotNetty.Dashbord.GrpcProtocol.Extensions
{
public static class ErrorExtensions
{
public static void Unauthenticated(string msg= "Invalid Token")
{
throw new Grpc.Core.RpcException(new Status(StatusCode.Unauthenticated, msg));
}
}
}

+ 30
- 0
src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcProtocol/Extensions/ServerCallContextExtensions.cs Bestand weergeven

@@ -0,0 +1,30 @@
using Grpc.Core;
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.DotNetty.Dashbord.GrpcProtocol.Extensions
{
public static class ServerCallContextExtensions
{
public static void SetResultStatus(this ServerCallContext serverCallContext, StatusCode statusCode, string detail)
{
serverCallContext.Status = new Status(statusCode, detail);
}

public static void Ok(this ServerCallContext serverCallContext,string detail="")
{
serverCallContext.Status = new Status(StatusCode.OK, detail);
}

public static void Auth(this ServerCallContext serverCallContext, string detail = "")
{
serverCallContext.Status = new Status(StatusCode.Unauthenticated, detail);
}

public static void InternalError(this ServerCallContext serverCallContext, string detail = "")
{
serverCallContext.Status = new Status(StatusCode.Internal, detail);
}
}
}

+ 0
- 6
src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcProtocol/JT808AtomicCounterService.proto Bestand weergeven

@@ -2,7 +2,6 @@

package JT808.GrpcDashbord.AtomicCounterGrpcService;

import "ResultReply.proto";
import "EmptyRequest.proto";

service AtomicCounterService{
@@ -11,11 +10,6 @@ service AtomicCounterService{
}

message AtomicCounterReply{
AtomicCounterInfo AtomicCounterInfo = 1;
JT808.GrpcDashbord.ServiceGrpcBase.ResultReply ResultReply = 2;
}

message AtomicCounterInfo{
int32 MsgSuccessCount = 1;
int32 MsgFailCount = 2;
}

+ 17
- 192
src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcProtocol/csharp/JT808AtomicCounterService.cs Bestand weergeven

@@ -25,26 +25,20 @@ namespace JT808.GrpcDashbord.AtomicCounterGrpcService {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"Ch9KVDgwOEF0b21pY0NvdW50ZXJTZXJ2aWNlLnByb3RvEitKVDgwOC5HcnBj",
"RGFzaGJvcmQuQXRvbWljQ291bnRlckdycGNTZXJ2aWNlGhFSZXN1bHRSZXBs",
"eS5wcm90bxoSRW1wdHlSZXF1ZXN0LnByb3RvIrUBChJBdG9taWNDb3VudGVy",
"UmVwbHkSWQoRQXRvbWljQ291bnRlckluZm8YASABKAsyPi5KVDgwOC5HcnBj",
"RGFzaGJvcmQuQXRvbWljQ291bnRlckdycGNTZXJ2aWNlLkF0b21pY0NvdW50",
"ZXJJbmZvEkQKC1Jlc3VsdFJlcGx5GAIgASgLMi8uSlQ4MDguR3JwY0Rhc2hi",
"b3JkLlNlcnZpY2VHcnBjQmFzZS5SZXN1bHRSZXBseSJCChFBdG9taWNDb3Vu",
"dGVySW5mbxIXCg9Nc2dTdWNjZXNzQ291bnQYASABKAUSFAoMTXNnRmFpbENv",
"dW50GAIgASgFMrACChRBdG9taWNDb3VudGVyU2VydmljZRKKAQoTR2V0VGNw",
"QXRvbWljQ291bnRlchIwLkpUODA4LkdycGNEYXNoYm9yZC5TZXJ2aWNlR3Jw",
"Y0Jhc2UuRW1wdHlSZXF1ZXN0Gj8uSlQ4MDguR3JwY0Rhc2hib3JkLkF0b21p",
"Y0NvdW50ZXJHcnBjU2VydmljZS5BdG9taWNDb3VudGVyUmVwbHkiABKKAQoT",
"R2V0VWRwQXRvbWljQ291bnRlchIwLkpUODA4LkdycGNEYXNoYm9yZC5TZXJ2",
"aWNlR3JwY0Jhc2UuRW1wdHlSZXF1ZXN0Gj8uSlQ4MDguR3JwY0Rhc2hib3Jk",
"LkF0b21pY0NvdW50ZXJHcnBjU2VydmljZS5BdG9taWNDb3VudGVyUmVwbHki",
"AGIGcHJvdG8z"));
"RGFzaGJvcmQuQXRvbWljQ291bnRlckdycGNTZXJ2aWNlGhJFbXB0eVJlcXVl",
"c3QucHJvdG8iQwoSQXRvbWljQ291bnRlclJlcGx5EhcKD01zZ1N1Y2Nlc3ND",
"b3VudBgBIAEoBRIUCgxNc2dGYWlsQ291bnQYAiABKAUysAIKFEF0b21pY0Nv",
"dW50ZXJTZXJ2aWNlEooBChNHZXRUY3BBdG9taWNDb3VudGVyEjAuSlQ4MDgu",
"R3JwY0Rhc2hib3JkLlNlcnZpY2VHcnBjQmFzZS5FbXB0eVJlcXVlc3QaPy5K",
"VDgwOC5HcnBjRGFzaGJvcmQuQXRvbWljQ291bnRlckdycGNTZXJ2aWNlLkF0",
"b21pY0NvdW50ZXJSZXBseSIAEooBChNHZXRVZHBBdG9taWNDb3VudGVyEjAu",
"SlQ4MDguR3JwY0Rhc2hib3JkLlNlcnZpY2VHcnBjQmFzZS5FbXB0eVJlcXVl",
"c3QaPy5KVDgwOC5HcnBjRGFzaGJvcmQuQXRvbWljQ291bnRlckdycGNTZXJ2",
"aWNlLkF0b21pY0NvdW50ZXJSZXBseSIAYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::JT808.GrpcDashbord.ServiceGrpcBase.ResultReplyReflection.Descriptor, global::JT808.GrpcDashbord.ServiceGrpcBase.EmptyRequestReflection.Descriptor, },
new pbr::FileDescriptor[] { global::JT808.GrpcDashbord.ServiceGrpcBase.EmptyRequestReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterReply), global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterReply.Parser, new[]{ "AtomicCounterInfo", "ResultReply" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterInfo), global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterInfo.Parser, new[]{ "MsgSuccessCount", "MsgFailCount" }, null, null, null)
new pbr::GeneratedClrTypeInfo(typeof(global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterReply), global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterReply.Parser, new[]{ "MsgSuccessCount", "MsgFailCount" }, null, null, null)
}));
}
#endregion
@@ -76,183 +70,14 @@ namespace JT808.GrpcDashbord.AtomicCounterGrpcService {

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AtomicCounterReply(AtomicCounterReply other) : this() {
atomicCounterInfo_ = other.atomicCounterInfo_ != null ? other.atomicCounterInfo_.Clone() : null;
resultReply_ = other.resultReply_ != null ? other.resultReply_.Clone() : null;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AtomicCounterReply Clone() {
return new AtomicCounterReply(this);
}

/// <summary>Field number for the "AtomicCounterInfo" field.</summary>
public const int AtomicCounterInfoFieldNumber = 1;
private global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterInfo atomicCounterInfo_;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterInfo AtomicCounterInfo {
get { return atomicCounterInfo_; }
set {
atomicCounterInfo_ = value;
}
}

/// <summary>Field number for the "ResultReply" field.</summary>
public const int ResultReplyFieldNumber = 2;
private global::JT808.GrpcDashbord.ServiceGrpcBase.ResultReply resultReply_;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::JT808.GrpcDashbord.ServiceGrpcBase.ResultReply ResultReply {
get { return resultReply_; }
set {
resultReply_ = value;
}
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as AtomicCounterReply);
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public bool Equals(AtomicCounterReply other) {
if (ReferenceEquals(other, null)) {
return false;
}
if (ReferenceEquals(other, this)) {
return true;
}
if (!object.Equals(AtomicCounterInfo, other.AtomicCounterInfo)) return false;
if (!object.Equals(ResultReply, other.ResultReply)) return false;
return Equals(_unknownFields, other._unknownFields);
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override int GetHashCode() {
int hash = 1;
if (atomicCounterInfo_ != null) hash ^= AtomicCounterInfo.GetHashCode();
if (resultReply_ != null) hash ^= ResultReply.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
return hash;
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override string ToString() {
return pb::JsonFormatter.ToDiagnosticString(this);
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void WriteTo(pb::CodedOutputStream output) {
if (atomicCounterInfo_ != null) {
output.WriteRawTag(10);
output.WriteMessage(AtomicCounterInfo);
}
if (resultReply_ != null) {
output.WriteRawTag(18);
output.WriteMessage(ResultReply);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int CalculateSize() {
int size = 0;
if (atomicCounterInfo_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(AtomicCounterInfo);
}
if (resultReply_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(ResultReply);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
return size;
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void MergeFrom(AtomicCounterReply other) {
if (other == null) {
return;
}
if (other.atomicCounterInfo_ != null) {
if (atomicCounterInfo_ == null) {
atomicCounterInfo_ = new global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterInfo();
}
AtomicCounterInfo.MergeFrom(other.AtomicCounterInfo);
}
if (other.resultReply_ != null) {
if (resultReply_ == null) {
resultReply_ = new global::JT808.GrpcDashbord.ServiceGrpcBase.ResultReply();
}
ResultReply.MergeFrom(other.ResultReply);
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void MergeFrom(pb::CodedInputStream input) {
uint tag;
while ((tag = input.ReadTag()) != 0) {
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
case 10: {
if (atomicCounterInfo_ == null) {
atomicCounterInfo_ = new global::JT808.GrpcDashbord.AtomicCounterGrpcService.AtomicCounterInfo();
}
input.ReadMessage(atomicCounterInfo_);
break;
}
case 18: {
if (resultReply_ == null) {
resultReply_ = new global::JT808.GrpcDashbord.ServiceGrpcBase.ResultReply();
}
input.ReadMessage(resultReply_);
break;
}
}
}
}

}

public sealed partial class AtomicCounterInfo : pb::IMessage<AtomicCounterInfo> {
private static readonly pb::MessageParser<AtomicCounterInfo> _parser = new pb::MessageParser<AtomicCounterInfo>(() => new AtomicCounterInfo());
private pb::UnknownFieldSet _unknownFields;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pb::MessageParser<AtomicCounterInfo> Parser { get { return _parser; } }

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
get { return global::JT808.GrpcDashbord.AtomicCounterGrpcService.JT808AtomicCounterServiceReflection.Descriptor.MessageTypes[1]; }
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
pbr::MessageDescriptor pb::IMessage.Descriptor {
get { return Descriptor; }
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AtomicCounterInfo() {
OnConstruction();
}

partial void OnConstruction();

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AtomicCounterInfo(AtomicCounterInfo other) : this() {
msgSuccessCount_ = other.msgSuccessCount_;
msgFailCount_ = other.msgFailCount_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public AtomicCounterInfo Clone() {
return new AtomicCounterInfo(this);
public AtomicCounterReply Clone() {
return new AtomicCounterReply(this);
}

/// <summary>Field number for the "MsgSuccessCount" field.</summary>
@@ -279,11 +104,11 @@ namespace JT808.GrpcDashbord.AtomicCounterGrpcService {

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as AtomicCounterInfo);
return Equals(other as AtomicCounterReply);
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public bool Equals(AtomicCounterInfo other) {
public bool Equals(AtomicCounterReply other) {
if (ReferenceEquals(other, null)) {
return false;
}
@@ -342,7 +167,7 @@ namespace JT808.GrpcDashbord.AtomicCounterGrpcService {
}

[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void MergeFrom(AtomicCounterInfo other) {
public void MergeFrom(AtomicCounterReply other) {
if (other == null) {
return;
}


+ 4
- 18
src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcServer/GrpcImpls/JT808AtomicCounterServiceGrpcImpl.cs Bestand weergeven

@@ -14,30 +14,16 @@ namespace JT808.DotNetty.Dashbord.GrpcServer.GrpcImpls
public override Task<AtomicCounterReply> GetTcpAtomicCounter(EmptyRequest request, ServerCallContext context)
{
AtomicCounterReply atomicCounterReply = new AtomicCounterReply();
atomicCounterReply.AtomicCounterInfo = new AtomicCounterInfo
{
MsgFailCount = 10,
MsgSuccessCount = 11111
};
atomicCounterReply.ResultReply = new ResultReply
{
Code = ResultReply.Types.StatusCode.Success,
};
atomicCounterReply.MsgFailCount = 10;
atomicCounterReply.MsgSuccessCount = 1111;
return Task.FromResult(atomicCounterReply);
}

public override Task<AtomicCounterReply> GetUdpAtomicCounter(EmptyRequest request, ServerCallContext context)
{
AtomicCounterReply atomicCounterReply = new AtomicCounterReply();
atomicCounterReply.AtomicCounterInfo = new AtomicCounterInfo
{
MsgFailCount = 50,
MsgSuccessCount = 10000
};
atomicCounterReply.ResultReply = new ResultReply
{
Code = ResultReply.Types.StatusCode.Success,
};
atomicCounterReply.MsgFailCount = 50;
atomicCounterReply.MsgSuccessCount = 1111;
return Task.FromResult(atomicCounterReply);
}
}


+ 9
- 3
src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcServer/Interceptors/DemoInterceptor.cs Bestand weergeven

@@ -1,5 +1,7 @@
using Grpc.Core;
using Grpc.Core.Interceptors;
using JT808.DotNetty.Dashbord.GrpcProtocol.Extensions;
using JT808.GrpcDashbord.ServiceGrpcBase;
using System;
using System.Collections.Generic;
using System.Text;
@@ -11,17 +13,21 @@ namespace JT808.DotNetty.Dashbord.GrpcServer.Interceptors
///
/// https://github.com/grpc/grpc/blob/master/doc/server_side_auth.md
/// https://github.com/Falco20019/grpc-opentracing
/// https://github.com/grpc/proposal/blob/master/L12-csharp-interceptors.md
/// https://stackoverflow.com/questions/52950210/populate-authcontext-in-grpc-c-sharp-from-jwt-authentication
/// https://github.com/grpc/grpc/tree/master/doc
/// </summary>
class DemoInterceptor : Interceptor
{
public override Task<TResponse> UnaryServerHandler<TRequest, TResponse>(TRequest request, ServerCallContext context, UnaryServerMethod<TRequest, TResponse> continuation)
public override Task<TResponse> UnaryServerHandler<TRequest, TResponse>(TRequest request, ServerCallContext context, UnaryServerMethod<TRequest, TResponse> continuation)
{
if(TryGetValue(context.RequestHeaders,"token",out var str))
{
//context.Status = new Status(StatusCode.Unauthenticated, "Invalid token");
return default(Task<TResponse>);
//ErrorExtensions.Unauthenticated();
}
return continuation(request, context);
//return Task.FromResult(default(TResponse));
//return await continuation(request, context);
}

private bool TryGetValue(Metadata metadata,string key,out string value)


+ 9
- 1
src/JT808.DotNetty.Admin/JT808.DotNetty.Dashbord.GrpcServer/Program.cs Bestand weergeven

@@ -33,7 +33,15 @@ namespace JT808.DotNetty.Dashbord.GrpcServer
Metadata metadata = new Metadata();
metadata.Add("token", "test");
metadata.Add("request", "web");
var result=client.GetTcpAtomicCounter(new GrpcDashbord.ServiceGrpcBase.EmptyRequest(), metadata);
try
{
var result = client.GetTcpAtomicCounter(new GrpcDashbord.ServiceGrpcBase.EmptyRequest(), metadata);
}
catch (RpcException ex)
{

}
Console.ReadKey();
server.ShutdownAsync().Wait();
}


+ 1
- 1
src/JT808.DotNetty.Dashbord.sln Bestand weergeven

@@ -13,7 +13,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Dashbord.Grp
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Dashbord", "JT808.DotNetty.Admin\JT808.DotNetty.Dashbord\JT808.DotNetty.Dashbord.csproj", "{80D1505D-44E1-4128-8900-B5C0AE7C69E5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.DotNetty.Dashbord.GrpcServer", "JT808.DotNetty.Admin\JT808.DotNetty.Dashbord.GrpcServer\JT808.DotNetty.Dashbord.GrpcServer.csproj", "{9F143F03-D90D-477F-9CE4-0BD1E2A1E379}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.DotNetty.Dashbord.GrpcServer", "JT808.DotNetty.Admin\JT808.DotNetty.Dashbord.GrpcServer\JT808.DotNetty.Dashbord.GrpcServer.csproj", "{9F143F03-D90D-477F-9CE4-0BD1E2A1E379}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution


Laden…
Annuleren
Opslaan