簡體   English   中英

使用 java grpc 在 ServerInterceptor 中驗證請求的方法

[英]Approach to validate request in ServerInterceptor using java grpc

我正在使用 GRPC Java 並希望使用攔截器驗證請求。

許多這樣的鏈接和告訴了一種使用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()),但在發送默認值時這些參數未顯示在字符串中(如字符串的“”或 int32 的 0) [我正在使用bloomrpc 在本地機器上發送請求]。 那么在發送默認值或bloomrpc中有什么東西時,這些值不會顯示在原始字符串中?

所以我的兩個問題是:

  1. 驗證請求的不同方法(考慮到許多請求都有一些公共字段,其檢查條件也相同)。
  2. 在原始字符串中顯示默認值參數的任何解決方法。

Protobuf 不會在線發送默認值。 為了具有一致性行為,它不打印(toString)默認值。 IMO,如果它打印默認值,它可能會很煩人,特別是如果你有很多很多字段。

我認為您在驗證 object 時無需擔心 toString 行為。 因為,當您使用 getter 時,它應該返回默認值(例如字符串字段的“”)。

LogNet's gRPC Spring boot starter natively supports integration with Spring Boot Validation, you can read more how to configure constraints using Java Beans validation XML configuration support here

免責聲明:我是這個首發的作者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM