该方法中需要增加对 SQLServerSetStatement SQLServerCommitStatement SQLServerRollbackStatement 等sqlserver专门的statement对象的支持,
否则这些statment报错: enyMessage = x.getClass() + " not allow"
版本 1.0.11
原提问者GitHub用户wangyu4882
WallVisitorUtils.preVisitCheck方法是阿里巴巴的SQL防火墙(Wall)中的一个工具方法,用于检查SQL语句是否合法。具体来说,它会检查SQL语句中是否包含不允许的关键字和字符,例如SELECT INTO、TRUNCATE、DROP等危险操作。
要在 WallVisitorUtils.preVisitCheck 方法中添加对 SQL Server 专用语句对象的支持,你可以参考以下步骤:
打开 WallVisitorUtils 类,找到 preVisitCheck 方法。 在方法的开头,添加一些检查的逻辑来支持 SQL Server 专用语句对象。你可以使用 instanceof 运算符来检查 x 是否是 SQL Server 专用语句对象。例如: if (x instanceof SQLServerSetStatement || x instanceof SQLServerCommitStatement || x instanceof SQLServerRollbackStatement) { // 处理 SQL Server 专用语句对象的逻辑 // ... } else { // 处理其他语句对象的逻辑 // ... } 在处理 SQL Server 专用语句对象的逻辑中,你可以根据需要执行相应的操作或生成适当的错误消息。例如: if (x instanceof SQLServerSetStatement) { // 处理 SQLServerSetStatement 的逻辑 // ... } else if (x instanceof SQLServerCommitStatement) { // 处理 SQLServerCommitStatement 的逻辑 // ... } else if (x instanceof SQLServerRollbackStatement) { // 处理 SQLServerRollbackStatement 的逻辑 // ... } else { // 如果代码执行到这里,表示有一个未知类型的 SQL Server 专用语句对象 String errorMessage = x.getClass() + " not allowed for SQL Server"; throw new RuntimeException(errorMessage); } 根据需要,你可以根据语句对象的类型执行相应的操作,或者生成一个错误消息并抛出异常。请根据你的业务需求进行适当的处理。 注意:以上只是一个示例,具体的实现取决于你的应用程序和对 SQL Server 语句对象的需求。你可以根据自己的情况进行适当的调整和扩展。
如果你需要在Druid中增加对SQL Server的专门Statement对象(如SQLServerSetStatement、SQLServerCommitStatement、SQLServerRollbackStatement)的支持,你可以按照以下步骤进行:
创建自定义Statement类:首先,创建一个自定义的Statement类,继承自Druid已有的Statement类。在这个自定义类中,实现SQL Server特定Statement逻辑的处理。
修改Druid源码:在Druid源码中找到相关的Statement解析和执行逻辑的位置(通常位于com.alibaba.druid.sql.ast.statement包下)。将自定义的Statement类添加到相应的位置,并确保它能够正确解析和执行SQL Server特定的语句。
编译和使用修改后的Druid:重新编译Druid,并将修改后的Druid库引入到你的项目中。确保在项目中使用的是经过修改的Druid版本。
请注意,这种修改需要对Druid源码进行操作,并且需要深入理解Druid的架构和工作原理。此外,修改后的Druid可能与原始版本不兼容,需要谨慎测试和验证。
建议在进行任何修改之前,先仔细阅读Druid的相关文档、了解Druid的架构和扩展机制,并参考社区或官方资源,以获取更详细和准确的指导。
已添加, 另外,可通过WallConfig中setNoneBaseStatementAllow(true) 允许未特殊处理的Statement执行。
原回答者GitHub用户yakolee
在WallVisitorUtils.preVisitCheck方法中,如果需要增加对SQLServerSetStatement、SQLServerCommitStatement和SQLServerRollbackStatement等SQLServer专门的Statement对象的支持,您可以按照以下步骤进行:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。