springboot druid 数据库多SQL错误 multi-statement not allow
Caused by: java
.sql.SQLException
: sql injection violation, multi-statement not allow
com
.alibaba.druid.wall.WallFilter.check
(WallFilter
.java
:
714
) at
com
.alibaba.druid.wall.WallFilter.connection
_prepareStatement(WallFilter
.java
:
240
) at
com
.alibaba.druid.filter.FilterChainImpl.connection
_prepareStatement(FilterChainImpl
.java
:
448
) at
com
.alibaba.druid.filter.FilterAdapter.connection
_prepareStatement(FilterAdapter
.java
:
928
) at
com
.alibaba.druid.filter.FilterEventAdapter.connection
_prepareStatement(FilterEventAdapter
.java
:
122
) at
com
.alibaba.druid.filter.FilterChainImpl.connection
_prepareStatement(FilterChainImpl
.java
:
448
) at
com
.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement
(ConnectionProxyImpl
.java
:
342
) at
com
.alibaba.druid.pool.DruidPooledConnection.prepareStatement
(DruidPooledConnection
.java
:
318
)
解决方案:
1、配置数据库连接,添加allowMultiQueries=true
jdbc.url=jdbc:mysql:
//localhost:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
2、如果需要开启wall监控,同时允许multiStatementAllow,就不要在application.yml中配置filter,自己定义
//使用连接池dataSource
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
List<Filter> filterList=new ArrayList<>();
filterList.add(wallFilter());
druidDataSource.setProxyFilters(filterList);
return druidDataSource;
}
@Bean
public WallFilter wallFilter(){
WallFilter wallFilter=new WallFilter();
wallFilter.setConfig(wallConfig());
return wallFilter;
}
@Bean
public WallConfig wallConfig(){
WallConfig config =new WallConfig();
config.setMultiStatementAllow(true);//允许一次执行多条语句
config.setNoneBaseStatementAllow(true);//允许非基本语句的其他语句
return config;
}