在我进行数据库foreach批量更新时,报错 sql injection violation, multi-statement not allow,重复执行sql语句导致sql注入异常。在网上找了不少案例都没有成功,最后发现了下面这个解决办法,亲测有效,记录一下。
解决办法(分两步)
第一步
&allowMultiQueries=true
还是需要加到URL后面的,必须的
第二步:编写druidconfig.java配置
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
List filterList=new ArrayList<>(); //可以链式叠加
filterList.add(wallFilter());
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setProxyFilters(filterList);
return druidDataSource;
//return new DruidDataSource(); 不需要执行多条语句的话,只需要这一个return即可,下面的WallFilter 和WallConfig 都不用,当然监控servlet要的
}
/**
* 配置druid执行多条sql(批量执行),避免报sql注入异常
* 链式配置,从下往上注入
* @return
*/
@Bean
public WallFilter wallFilter() {
WallFilter wallFilter = new WallFilter();
wallFilter.setConfig(wallConfig());
return wallFilter;
}
@Bean
public WallConfig wallConfig() {
WallConfig wallconfig = new WallConfig();
//允许一次执行多条语句
wallconfig .setMultiStatementAllow(true);
//允许非基本语句的其他语句
wallconfig .setNoneBaseStatementAllow(true);
return wallconfig ;
}
}
来源:https://blog.csdn.net/weixin_43657383/article/details/105524618