diff --git a/src/main/java/com/alibaba/druid/wall/WallFilter.java b/src/main/java/com/alibaba/druid/wall/WallFilter.java index a5512f8f30..dc98c6d4e0 100644 --- a/src/main/java/com/alibaba/druid/wall/WallFilter.java +++ b/src/main/java/com/alibaba/druid/wall/WallFilter.java @@ -313,6 +313,10 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { @Override public boolean isWrapperFor(FilterChain chain, Wrapper wrapper, Class iface) throws SQLException { + if (config.isAllowDoPrivileged() && WallProvider.ispPivileged()) { + return chain.isWrapperFor(wrapper, iface); + } + if (!this.provider.getConfig().isWrapAllow()) { return false; } @@ -321,6 +325,10 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { @Override public T unwrap(FilterChain chain, Wrapper wrapper, Class iface) throws SQLException { + if (config.isAllowDoPrivileged() && WallProvider.ispPivileged()) { + return chain.unwrap(wrapper, iface); + } + if (!this.provider.getConfig().isWrapAllow()) { return null; } diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java index 649dc6f2d2..e327643629 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java @@ -176,6 +176,15 @@ public abstract class WallProvider { result.getViolations().addAll(visitor.getViolations()); return result; } + + public static boolean ispPivileged() { + Boolean value = privileged.get(); + if (value == null) { + return false; + } + + return value.booleanValue(); + } public static T doPrivileged(PrivilegedAction action) { privileged.set(Boolean.TRUE);