我将使用 Jackson Mapper 在 Spring MVC 中转义 HTML 以避免 XSS 攻击。
我寻找独自与杰克逊一起逃跑以及如何在春季配置杰克逊。
我尝试使用 "<" ">" 之类的文本导出 json,我希望将它们转义到<
,>
例如,我添加了一些用 "bold tag" 括起来的文本<b>
,我希望在前端 html 中看到纯粗体标签文本,但最终文本在前端 html 页面中以粗体显示。
以下是我的方法,我不知道为什么它没有成功。
任何人都可以帮忙吗?
提前致谢!
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
this.getJsonFactory().setCharacterEscapes(new CustomCharacterEscapes());
}
}
public class CustomCharacterEscapes extends CharacterEscapes {
private final int[] asciiEscapes;
public CustomCharacterEscapes() {
int[] esc = CharacterEscapes.standardAsciiEscapesForJSON();
esc['<'] = CharacterEscapes.ESCAPE_STANDARD;
esc['>'] = CharacterEscapes.ESCAPE_STANDARD;
esc['&'] = CharacterEscapes.ESCAPE_STANDARD;
esc['\''] = CharacterEscapes.ESCAPE_STANDARD;
asciiEscapes = esc;
}
@Override
public int[] getEscapeCodesForAscii() {
return asciiEscapes;
}
@Override
public SerializableString getEscapeSequence(int ch) {
return null;
}
}
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<array>
<bean id="jsonConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper">
<bean class="x.y.z.CustomObjectMapper" />
</property>
</bean>
</array>
</property>
</bean>