Selaa lähdekoodia

set the WallFilter to forbid operations except select

sunyj 8 vuotta sitten
vanhempi
commit
59147f266c

+ 30 - 4
kanban-console/src/main/java/com/uas/kanban/support/DataSourceManager.java

@@ -1,6 +1,9 @@
 package com.uas.kanban.support;
 
+import com.alibaba.druid.filter.Filter;
 import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.wall.WallConfig;
+import com.alibaba.druid.wall.WallFilter;
 import com.uas.kanban.annotation.NotEmpty;
 import com.uas.kanban.base.BaseDao;
 import com.uas.kanban.model.DataSource;
@@ -9,9 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.sql.SQLException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 管理数据源
@@ -143,8 +144,33 @@ public class DataSourceManager {
             ds.setMaxPoolPreparedStatementPerConnectionSize(20);
             ds.setTimeBetweenLogStatsMillis(60000);
             // 配置监控统计拦截的filters, 监控统计:"stat",防SQL注入:"wall",组合使用: "stat,wall"
-            ds.setFilters("stat,slf4j,wall");
+            ds.setFilters("stat,slf4j");
             ds.setConnectionProperties("druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000");
+
+            // 设置拦截过滤器,只允许读操作
+            List<Filter> filters = new ArrayList<>();
+            WallFilter wallFilter = new WallFilter();
+            WallConfig config = new WallConfig();
+            config.setSelectIntoAllow(false);
+            config.setDeleteAllow(false);
+            config.setUpdateAllow(false);
+            config.setInsertAllow(false);
+            config.setReplaceAllow(false);
+            config.setMergeAllow(false);
+            config.setCallAllow(false);
+            config.setSetAllow(false);
+            config.setTruncateAllow(false);
+            config.setCreateTableAllow(false);
+            config.setAlterTableAllow(false);
+            config.setDropTableAllow(false);
+            config.setUseAllow(false);
+            config.setDescribeAllow(false);
+            config.setShowAllow(false);
+            config.setCommitAllow(false);
+            config.setRollbackAllow(false);
+            wallFilter.setConfig(config);
+            filters.add(wallFilter);
+            ds.setProxyFilters(filters);
             return ds;
         }
     }