Raj*_*Raj 9 spring json jackson spring-boot
在我们的应用程序中,我们必须为每个请求和响应加密/解密Json属性值(而不是属性名称).例,
{"userName":"encrypted value", "email":"encrypted value"}
我们使用Sprint boot 1.3,我们使用@RequestBody和@ResponseBody注释将请求json与对象绑定,并将响应对象序列化为JSON.
我们不想在每个控制器方法中调用encrypt/decrypt方法.有没有什么办法可以指示sprint在绑定请求对象之前解密json值?同样,在将响应对象字段值转换为json之前对其进行加密?或者定制杰克逊可以帮助我们?
谢谢!
epa*_*van 12
您可以编写自己的http消息转换器.由于您使用的是弹簧启动,因此非常简单:只需扩展自定义转换器AbstractHttpMessageConverter
并使用@Component
注释标记类.
从春季文档:
您可以通过在Spring Boot上下文中添加该类型的bean来提供其他转换器.如果你添加的bean是默认包含的类型(比如MappingJackson2HttpMessageConverter用于JSON转换),那么它将替换默认值.
这是一个简单的例子:
@Component
public class Converter extends AbstractHttpMessageConverter<Object> {
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
@Inject
private ObjectMapper objectMapper;
public Converter(){
super(MediaType.APPLICATION_JSON_UTF8,
new MediaType("application", "*+json", DEFAULT_CHARSET));
}
@Override
protected boolean supports(Class<?> clazz) {
return true;
}
@Override
protected Object readInternal(Class<? extends Object> clazz,
HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
return objectMapper.readValue(decrypt(inputMessage.getBody()), clazz);
}
@Override
protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
outputMessage.getBody().write(encrypt(objectMapper.writeValueAsBytes(o)));
}
private InputStream decrypt(InputStream inputStream){
// do your decryption here
return inputStream;
}
private byte[] encrypt(byte[] bytesToEncrypt){
// do your encryption here
return bytesToEncrypt;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5569 次 |
最近记录: |