Spring中html字符编解码
场景描述
今天基于 jeesite 在做一个简单的curd的功能时,遇到个比较有意思的问题,在此记录一下,在使用springMVC form标签作双向绑定时,如果文本域中填写的为html代码,提交到后端会自动进行转义,如下:
1
|
<form:textarea path="content" id="content" style="width:600px;height:300px;"/> |
提交后,在后端接收到的content自动会将<,> &等符号自动转义成 \<,\>,\&等字符,导致落地到数据库时的内容已经是转义后的内容了。
原因分析
一开始比较疑惑,为什么会转义呢? 在Controller中看到的对象中的属性绑定的值确实是已经转义的。检查代码时,没有发现有手动转义的地方,在检查父级代码时,至看到BaseController此方法,才得以解惑。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/** * 初始化数据绑定 * 1. 将所有传递进来的String进行HTML编码,防止XSS攻击 * 2. 将字段中Date类型转换为String类型 */ @InitBinder protected void initBinder(WebDataBinder binder) { // String类型转换,将所有传递进来的String进行HTML编码,防止XSS攻击 binder.registerCustomEditor(String.class, new PropertyEditorSupport() { @Override public void setAsText(String text) { setValue(text == null ? null : StringEscapeUtils.escapeHtml4(text.trim())); } |