mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
add jmx support
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package com.alibaba.druid.wall;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
import com.alibaba.druid.DruidRuntimeException;
|
||||
import com.alibaba.druid.filter.FilterAdapter;
|
||||
@@ -20,7 +22,7 @@ import com.alibaba.druid.wall.spi.MySqlWallProvider;
|
||||
import com.alibaba.druid.wall.spi.OracleWallProvider;
|
||||
import com.alibaba.druid.wall.spi.SQLServerProvider;
|
||||
|
||||
public class WallFilter extends FilterAdapter {
|
||||
public class WallFilter extends FilterAdapter implements WallFilterMBean {
|
||||
|
||||
private final static Log LOG = LogFactory.getLog(WallFilter.class);
|
||||
|
||||
@@ -32,8 +34,8 @@ public class WallFilter extends FilterAdapter {
|
||||
|
||||
private WallConfig config;
|
||||
|
||||
private boolean logViolation = false;
|
||||
private boolean throwException = true;
|
||||
private volatile boolean logViolation = false;
|
||||
private volatile boolean throwException = true;
|
||||
|
||||
@Override
|
||||
public void init(DataSourceProxy dataSource) {
|
||||
@@ -59,7 +61,7 @@ public class WallFilter extends FilterAdapter {
|
||||
}
|
||||
} else if (JdbcUtils.SQL_SERVER.equals(dbType)) {
|
||||
provider = new SQLServerProvider(config);
|
||||
|
||||
|
||||
if (config == null) {
|
||||
config = new WallConfig(SQLServerProvider.DEFAULT_CONFIG_DIR);
|
||||
}
|
||||
@@ -94,6 +96,20 @@ public class WallFilter extends FilterAdapter {
|
||||
this.throwException = throwException;
|
||||
}
|
||||
|
||||
public void clearProviderCache() {
|
||||
if (provider != null) {
|
||||
provider.clearCache();
|
||||
}
|
||||
}
|
||||
|
||||
public Set<String> getProviderWhiteList() {
|
||||
if (provider == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
return provider.getWhiteList();
|
||||
}
|
||||
|
||||
public WallProvider getProvider() {
|
||||
return provider;
|
||||
}
|
||||
@@ -106,6 +122,10 @@ public class WallFilter extends FilterAdapter {
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
public boolean isInited() {
|
||||
return inited;
|
||||
}
|
||||
|
||||
public void checkInit() {
|
||||
if (inited) {
|
||||
throw new DruidRuntimeException("wall filter is inited");
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.alibaba.druid.wall;
|
||||
|
||||
public interface WallFilterMBean {
|
||||
|
||||
String getDbType();
|
||||
|
||||
boolean isLogViolation();
|
||||
|
||||
void setLogViolation(boolean logViolation);
|
||||
|
||||
boolean isThrowException();
|
||||
|
||||
void setThrowException(boolean throwException);
|
||||
|
||||
boolean isInited();
|
||||
|
||||
void clearProviderCache();
|
||||
}
|
||||
@@ -2,8 +2,10 @@ package com.alibaba.druid.wall;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
@@ -47,6 +49,20 @@ public abstract class WallProvider {
|
||||
}
|
||||
}
|
||||
|
||||
public Set<String> getWhiteList() {
|
||||
Set<String> hashSet = new HashSet<String>();
|
||||
lock.readLock().lock();
|
||||
try {
|
||||
if (whiteList != null) {
|
||||
hashSet.addAll(whiteList.keySet());
|
||||
}
|
||||
} finally {
|
||||
lock.readLock().unlock();
|
||||
}
|
||||
|
||||
return hashSet;
|
||||
}
|
||||
|
||||
public void clearCache() {
|
||||
lock.writeLock().lock();
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user