提交含%字符的输入至Thymeleaf后端时抛出转义异常的问题咨询
异常触发原因
该异常的核心触发原因是URI二次解码,完整链路如下:
- 前端通过
encodeURIComponent编码后,输入的%被转为符合规范的%25 - 应用服务器(如Tomcat)或Spring MVC解析请求参数时,会执行第一次URI解码,把
%25还原为原始的% - 低版本
thymeleaf-spring5组件存在设计缺陷,在SpringRequestUtils.checkViewNameNotInRequest方法中会对请求参数执行第二次不必要的URI解码,此时单独存在的%会被识别为不合法的不完整转义序列,直接抛出对应异常。
可行解决方案
- 方案1:升级Thymeleaf相关依赖版本,官方在
thymeleaf-spring5 3.0.12.RELEASE及以上版本修复了该不必要的二次解码逻辑,是成本最低的解决方案 - 方案2:新增Servlet过滤器,在请求进入Thymeleaf视图渲染逻辑之前,对请求参数中存在的单独
%提前编码为%25,避免二次解码时触发异常 - 方案3:后端新增参数校验逻辑,对包含非法URI转义序列的输入提前拦截,返回友好的业务错误提示,阻止请求进入Thymeleaf渲染流程
- 方案4:如果对应接口是数据接口不需要返回页面,可在Controller方法上添加
@ResponseBody注解,直接返回数据不走Thymeleaf视图解析流程,不会触发该解码异常
内容的提问来源于stack exchange,提问作者Newboz
相关产品推荐
相关产品推荐

