最近在做一个项目时,遇到一个问题,项目中使用的struts2.1.6.jar,使用过程中不存在乱码的问题,但是,项目经理要求,此版本的struts存在安全问题,而且struts官网也强烈建议开发者将struts升级到官网最新版本。本以为把相关的jar包替换掉后就大功告成了,但问题出来了,页面展示中的汉字全部都显示为"&XXX"的形式,如果是英文或数字就不存在这样的情况,这样的问题的原因是在页面中使用了property标签来显示相应的值,那么只要配置escape=false即可解决这样的问题,代码为: <property value="user.username" eascape="false"></property> 如果不配置,则escape的默认值是true 到这里,大家可能认为问题就这样解决了,但是整个工程有七百多个页面,使用了property标签的而没有配置escape的占了95%以上,虽然IDE的全局查找功能可以帮我们打到所有需要修改的地方,但是修改所花费的时间还是太长了,于是有了修改struts标签中escape默认值的想法,查阅struts的源代码,发现在PropertyTag这个类中存在一个escapeHtml的属性它的默认值是true,继续查看源码,终于定位了修改的地方,我们只要将这个escapeHtml的值修改为false即可。 找到下载的源代码,找到PropertyTag.java文件,修改之,保存,然后我们将其重新打包成jar文件(struts2采用maven进行管理,需要在本机上安装maven,然后使用mvn命令即可),将生成的struts-core的jar文件替换掉工程中使用的,测试,问题解决,对于极个别的需要使用eascape=true的情况,我们只需要修改这几个而已。 此问题有原因是当escape=true时会对进行htmlEncode所导致的,但是我们并不需要对其进行encode,这种解决方案所花费的时间只是最开始解决方案的1/5
Struts2升级带来的乱码问题解决方案
最新推荐文章于 2022-06-23 16:14:56 发布