开发者社区> 问答> 正文

WallVisitorUtils.preVisitCheck 方法

该方法中需要增加对 SQLServerSetStatement SQLServerCommitStatement SQLServerRollbackStatement 等sqlserver专门的statement对象的支持,

否则这些statment报错: enyMessage = x.getClass() + " not allow"

版本 1.0.11

原提问者GitHub用户wangyu4882

展开
收起
山海行 2023-07-05 22:09:58 51 0
5 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    WallVisitorUtils.preVisitCheck方法是阿里巴巴的SQL防火墙(Wall)中的一个工具方法,用于检查SQL语句是否合法。具体来说,它会检查SQL语句中是否包含不允许的关键字和字符,例如SELECT INTO、TRUNCATE、DROP等危险操作。

    2023-07-29 22:52:08
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    要在 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 语句对象的需求。你可以根据自己的情况进行适当的调整和扩展。

    2023-07-07 12:04:14
    赞同 展开评论 打赏
  • 如果你需要在Druid中增加对SQL Server的专门Statement对象(如SQLServerSetStatement、SQLServerCommitStatement、SQLServerRollbackStatement)的支持,你可以按照以下步骤进行:

    1. 创建自定义Statement类:首先,创建一个自定义的Statement类,继承自Druid已有的Statement类。在这个自定义类中,实现SQL Server特定Statement逻辑的处理。

    2. 修改Druid源码:在Druid源码中找到相关的Statement解析和执行逻辑的位置(通常位于com.alibaba.druid.sql.ast.statement包下)。将自定义的Statement类添加到相应的位置,并确保它能够正确解析和执行SQL Server特定的语句。

    3. 编译和使用修改后的Druid:重新编译Druid,并将修改后的Druid库引入到你的项目中。确保在项目中使用的是经过修改的Druid版本。

    请注意,这种修改需要对Druid源码进行操作,并且需要深入理解Druid的架构和工作原理。此外,修改后的Druid可能与原始版本不兼容,需要谨慎测试和验证。

    建议在进行任何修改之前,先仔细阅读Druid的相关文档、了解Druid的架构和扩展机制,并参考社区或官方资源,以获取更详细和准确的指导。

    2023-07-06 17:37:38
    赞同 展开评论 打赏
  • 已添加, 另外,可通过WallConfig中setNoneBaseStatementAllow(true) 允许未特殊处理的Statement执行。

    原回答者GitHub用户yakolee

    2023-07-06 12:44:23
    赞同 展开评论 打赏
  • 在WallVisitorUtils.preVisitCheck方法中,如果需要增加对SQLServerSetStatement、SQLServerCommitStatement和SQLServerRollbackStatement等SQLServer专门的Statement对象的支持,您可以按照以下步骤进行:

    1. 找到WallVisitorUtils类的源代码。
    2. 在preVisitCheck方法中找到对Statement对象的处理逻辑。
    3. 根据SQLServer的语法和特性,增加对SQLServerSetStatement、SQLServerCommitStatement和SQLServerRollbackStatement的支持。这可能涉及到解析和处理这些特定的Statement对象,并根据需要执行相应的操作。
    4. 确保在增加新的Statement对象时,不会影响现有的逻辑和其他数据库的兼容性。
    2023-07-06 08:43:55
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载