在Spring MVC项目中,我有一些控制器,它们以各种对象的形式返回数据。稍后,这些对象被序列化为JSON,JSON作为响应返回给客户端。
这是通过在应用程序配置中向configureMessageConverters()注册自定义MappingJackson2HttpMessageConverter来实现的。转换器使用
jackson.databind.ObjectWriter.writeValue(jackson.core.JsonGenerator, object)
用于对象序列化。
现在我需要实现XSS保护。由于所有数据都要经过序列化步骤,因此我想在这里过滤字符串值,删除除白名单中的符号(字母数字和一些标点符号)之外的所有符号。
有没有办法给Jackson提供一个在序列化过程中编辑字符串值的过滤器?
发布于 2016-08-04 05:39:25
我有一个MappingJackson2HttpMessageConverter的实例。在这里,在方法writeInternal(Object object, HttpOutputMessage outputMessage)中,我创建了我的自定义映射器的一个实例:mapper = new KJsonMapper();然后在那里使用这个映射器生成JSON。
KJsonMapper.java:
public class KJsonMapper extends ObjectMapper {
public KJsonMapper() {
enableAntiXSS();
}
private void enableAntiXSS() {
SimpleModule module = new SimpleModule("Anti-XSS Serializer",
new Version(1, 0, 0, "FINAL", "klab", "klab.anti-xss-serializer"));
module.addSerializer(String.class, new KJsonAntiXssSerializer());
registerModule(module);
}
}映射器本身使用自定义的JsonSerializer,这是为了提供反xss过滤。
KJsonAntiXssSerializer.java:
public class KJsonAntiXssSerializer extends JsonSerializer<String> {
public void serialize(String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException {
if (value == null) {
return;
}
String encodedValue = antiXss(value);
jsonGenerator.writeString(encodedValue);
}
private String antiXss(String value) {
// return processed value from here
}
}https://stackoverflow.com/questions/33278002
复制相似问题