问题:
报错信息包含:Druid sql injection violation, part alway false condition not allow
原有写法:
<if test="projectName != null "> and project_name like '%'||#{projectName}||'%' </if>
经过druid编译后,条件变为
AND project_name LIKE '%' OR ? OR '%'
解决:
方法一:
<if test="projectName != null "> and project_name like concat('%',#{projectName},'%') </if>
方法二:
<if test="projectName != null "> <bind name="bindProjectName" value="'%'+projectName+'%'"></bind> and project_name like #{bindProjectName} </if>
参考:https://www.cnblogs.com/shuaifing/p/7928628.html
另一种方法(如果实在改sql无效果的话)
可以删除wall参数:https://www.cnblogs.com/haha12/p/4670400.html
解决方案:
参数filters: 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall。
把 filters配置中 去掉 wall即可。