【问题标题】:Approach to validate request in ServerInterceptor using java grpc使用 java grpc 在 ServerInterceptor 中验证请求的方法
【发布时间】:2020-07-05 08:57:59
【问题描述】:

我正在使用 GRPC Java 并希望使用拦截器验证请求。

thisthis 这样的许多链接告诉了一种使用onMessage() 访问请求的方法,但我想知道他们正在做些什么来验证请求。

另外,onMessage() 中的消息参数是通用的,我不能直接访问请求字段参数,但必须使用一些 if-else/switch-case 对消息进行类型转换,然后单独对每个字段应用检查,即我现在的最后一个选择。

例如,这是一个示例 proto 文件:

...
service XYZService {
  rpc abc(Request1) returns (Response1);
  rpc def(Request2) returns (Response2);
  .
  .
  .
}

message Request1 {
  string name = 1;
  int32 number = 2;
}

message Request2 {
  string name = 1;
  int32 number = 2;
  string email = 3;
}
...

我还简单地打印了 onMessage() 的消息参数,发现请求参数为原始字符串 (message.toString()),但是在发送默认值时这些参数未显示在字符串中(如字符串的 "" 或 0对于 int32) [我正在使用bloomrpc 在本地机器上发送请求]。那么这些值在发送默认值或bloomrpc中有什么东西时不会显示在原始字符串中?

所以我的两个问题是:

  1. 验证请求的不同方法(考虑到许多请求都有一些公共字段,其检查条件也将相同)。
  2. 在原始字符串中显示默认值参数的任何解决方法。

【问题讨论】:

    标签: java validation grpc interceptor grpc-java


    【解决方案1】:

    Protobuf 不会在线发送默认值。为了具有一致性行为,它不打印(toString)默认值。 IMO,如果它打印默认值,可能会很烦人,特别是如果您有很多字段。

    我认为您在验证对象时无需担心 toString 行为。因为,当你使用 getter 时,它应该返回默认值(例如 "" 表示字符串字段)。

    【讨论】:

      【解决方案2】:

      LogNet's gRPC Spring boot starter 原生支持与 Spring Boot Validation 的集成,您可以阅读更多如何使用 Java Beans 验证 XML 配置支持来配置约束here

      免责声明:我是这个初学者的作者

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        • 2018-07-27
        • 2021-07-11
        • 1970-01-01
        • 2020-05-02
        • 2019-08-06
        • 1970-01-01
        相关资源
        最近更新 更多