记录时如何屏蔽grpc响应中的某些字段

How to mask out some field in grpc response when logging

我想在记录时屏蔽一些字段。 有什么好的屏蔽方法吗?

消息发送给客户端后。 我试图在记录之前屏蔽掉一些字段

你如何屏蔽字段?

--served to client
message {
  id : "user",
  phoneNumber : "12341234"
}


--logged response
message {
  id : "user",
  phoneNumber : "12******"
}

我认为没有办法像您提到的那样更改数据,但是有一种方法可以隐藏您不想在日志中打印的字段(出于安全原因我认为是这样)。你这样做的方式是 FieldMask.

所以为了这个例子,我冒昧地向架构中添加了另一个字段,我假设你有:

message User {
  string id = 1;
  string name = 2;
  string phone_number = 3;
}

现在假设我不想显示 phone 用户数,我可以使用 FieldMask 只保留 idname.所以首先我们构建一个FieldMask(你需要添加这个dependency来访问FieldMaskUtil):

public static final FieldMask WITH_ID_AND_NAME =
            FieldMaskUtil.fromFieldNumbers(User.class,
                    User.ID_FIELD_NUMBER,
                    User.NAME_FIELD_NUMBER);

那么我能做的就是 merge 这个 FieldMask 与一个现有的对象:

private static void log(User user, FieldMask fieldMask) {
    User.Builder userWithMaskedFields = User.newBuilder();
    FieldMaskUtil.merge(fieldMask, user, userWithMaskedFields);

    System.out.println(userWithMaskedFields);
}

public static void main(String[] args) {
    User user = User.newBuilder()
        .setId("user")
        .setName("a name")
        .setPhoneNumber("12341234")
        .build();

    System.out.println("---Without FieldMask---");
    System.out.println(user);
    System.out.println("---With FieldMask---");
    log(user, WITH_ID_AND_NAME);
}

这将给我以下输出:

---Without FieldMask---
id: "user"
name: "a name"
phone_number: "12341234"

---With FieldMask---
id: "user"
name: "a name"

希望对您有所帮助,如果您需要更多详细信息,请告诉我,我可以更新我的答案。