SELECT ?||'ABC' FROM DUAL这条语句在1.0.27上是能通过校验的,但是到了1.0.29上就会报以下异常:
com.alibaba.druid.sql.parser.ParserException: ERROR. token : QUESBAR, pos : 10 at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:600) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser.primary(OracleExprParser.java:465) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:85) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.parser.SQLExprParser.parseSelectItem(SQLExprParser.java:2166) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.parser.SQLSelectParser.parseSelectList(SQLSelectParser.java:373) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:267) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.select(OracleSelectParser.java:81) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser.parseStatementList(OracleStatementParser.java:131) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:79) ~[druid-1.0.29.jar:1.0.29]
我试了一下,加个空格就能通过校验,改为SELECT ? ||'ABC' FROM DUAL,避开了QUESBAR(?|)。
原提问者GitHub用户digitalsonic
在使用Druid的WallFilter时,有时候可能会因为防火墙规则过于严格而导致某些SQL语句无法通过。在您的情况下,可能是由于以下原因导致了这个问题:
WallFilter的防火墙规则过于严格
WallFilter默认启用了一些防火墙规则,以确保SQL语句的安全性。在某些情况下,这些规则可能过于严格,从而阻止了一些合法的SQL语句通过。您可以尝试调整WallFilter的防火墙规则,以允许这些SQL语句通过。
例如,在application.properties或application.yml文件中添加以下配置,以允许使用INSERT ALL语句:
properties
Copy
spring.datasource.druid.filters=wall
spring.datasource.druid.filter.wall.config.insert-into-values-check=false
在这个配置中,insert-into-values-check参数用于禁用INSERT ALL语句中的值列表检查。
SQL语句本身不符合规范
如果SQL语句本身不符合Oracle的规范,可能会被WallFilter拦截。在这种情况下,您需要修改SQL语句,以符合Oracle的规范。
例如,如果您的SQL语句中使用了Oracle不支持的语法(例如MySQL的语法),您需要将其修改为Oracle支持的语法。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。