add jmx support

This commit is contained in:
温少
2012-03-20 04:22:43 +08:00
parent fa2028074a
commit 533899e367
4 changed files with 60 additions and 6 deletions
@@ -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 {