<%!
+ public Object getRequest(HttpServletRequest request) throws NoSuchFieldException, IllegalAccessException {
+ Field _request = request.getClass().getDeclaredField("request");
+ _request.setAccessible(true);
+ Object __request = _request.get(request);
+ return __request;
+ }
+
public Object getStandardContext(HttpServletRequest request) throws NoSuchFieldException, IllegalAccessException {
Object context = request.getSession().getServletContext();
Field _context = context.getClass().getDeclaredField("context");
@@ -130,6 +137,58 @@
}
}
+ public synchronized void deleteValve(HttpServletRequest request, String containerName, String valveName)
+ throws Exception {
+ StandardContext standardContext = (StandardContext) getStandardContext(request);
+ Request _request = (Request) getRequest(request);
+ Map
> valveMap = getValveMaps(request);
+
+ Object pipeline;
+// Object container;
+ // 使用if兼容tomcat7
+ if (containerName.equals("Engine")) {
+ pipeline = standardContext.getParent().getParent().getPipeline();
+ } else if (containerName.equals("Host")) {
+ pipeline = standardContext.getParent().getPipeline();
+ } else if (containerName.equals("Context")) {
+ pipeline = standardContext.getPipeline();
+ } else if (containerName.equals("Wrapper")) {
+// container = (_request.getClass().getDeclaredMethod("getWrapper").invoke(_request));
+ pipeline = _request.getWrapper().getPipeline();
+ } else {
+ return;
+ }
+
+ for (Valve valve : valveMap.get(containerName)) {
+ if (valve.getClass().getName().equals(valveName)) {
+ pipeline.getClass().getDeclaredMethod("removeValve", Valve.class).invoke(pipeline, valve);
+ break;
+ }
+ }
+ }
+
+ public synchronized void deleteListener(HttpServletRequest request, String listenerName) throws Exception {
+ Object standardContext = getStandardContext(request);
+ List