我有一个JAX-RS服务,其中包含许多API来修改和检索有关组织的数据。我还有一个日志记录过滤器,它记录所有请求和响应。现在我引入了无法按原样记录的敏感数据,因此必须对值进行某种混淆。
基本上,我的新请求如下:
class SetImportantDataRequest {
String field1;
@SensitiveData
String field2;
}
当前请求没有@SensitiveData
注释。当前过滤器只占用整个实体流并将其转换为字节数组并打印为UTF_8字符串。所以日志输出有这一行:
field1: whateverValue, field2: whateverValue2
我希望新的日志输出为:
field1: whateverValue, field2: ****
执行此操作的伪代码将位于filter / writerInceptor / messageBodyWriter中的某个位置(尚不确定,需要您的帮助):
if (field has annotation SensitiveData) {
log.info("****");
} else {
log.info(field.getValue());
}
到目前为止,我正在考虑在请求过滤器中获取流的方向,以某种方式从该流构建请求(至少当前注册的messageBodyWriter执行此操作,因此我应该能够复制该行为),并且对于要构建的对象类型,我认为我从注入过滤器的ResourceInfo
中获取。如果您认为这是正确的方法,那么我会问我如何重新使用现有的消息编写功能将流转换为请求对象?