Druid SQL防火墙需三要素齐备:引入druid-wall依赖、注册WallFilter、加载规则文件;仅配置启用无效,须Java代码注册Filter并确保执行顺序靠前,规则可通过URL自动识别或自定义文件加载,UTF-8无BOM编码,实测异常和监控页验证生效。

必须引入 druid-wall 依赖
仅靠 druid-spring-boot-starter 不包含 WallFilter 实现。Maven 中要显式添加:
-
com.alibaba.druid:druid-wall:1.2.23(推荐与 Druid 主版本一致) - Spring Boot 2.3+ 用户注意:若使用
druid-spring-boot-starter1.1.x,需确认其内置 wall 支持;否则仍需单独引
配置并注册 WallFilter
application.yml 中启用只是第一步,关键在 Filter 是否真正生效:
- 配置项:
spring.datasource.druid.wall.enabled=true - 但必须配合 Java 配置类注册
WallFilter,例如:
@Bean<br>public FilterRegistrationBean<wallfilter> wallFilter() {<br> FilterRegistrationBean<wallfilter> filter = new FilterRegistrationBean();<br> filter.setFilter(new WallFilter());<br> filter.addUrlPatterns("/*");<br> return filter;<br>}</wallfilter></wallfilter>
⚠️ 注意 Filter 执行顺序:若同时用了 WebStatFilter 或其他 Filter,WallFilter 应尽量靠前,确保 SQL 在统计/日志前就被拦截。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
确保规则文件被正确加载
WallFilter 拦截能力取决于是否加载了对应数据库的规则。有两条路径:
-
默认规则:Druid 根据
spring.datasource.url自动识别类型(如含mysql、oracle),加载内置规则。URL 必须规范,例如:jdbc:mysql://localhost:3306/test -
自定义规则:通过
spring.datasource.druid.wall.config-file=classpath:wall-filter.properties指定。文件内容为键值对,例如:deleteWhereAlone=false<br>truncateAllow=false<br>dropTableAllow=false
⚠️ 文件编码必须是 UTF-8 无 BOM,否则解析失败
验证是否真生效
别只看配置写了没,要实测:
- 执行
DELETE FROM user(无 WHERE 条件)或TRUNCATE TABLE log - 观察是否抛出
SQLException: violate wall config异常 - 检查 Druid 监控页 → “防火墙”标签页 → 统计数是否增长(如“违规模块数”)
- 注意:MyBatis 动态 SQL 若在 Java 层字符串拼接(非 XML 原始 SQL),WallFilter 无法检测
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










