@@ -15,45 +15,78 @@ public class WebLogicFilterProbe {
1515
1616 @ Override
1717 public String toString () {
18- String msg = "" ;
18+ StringBuilder msg = new StringBuilder () ;
1919 Map <String , List <Map <String , String >>> allFiltersData = new LinkedHashMap <String , List <Map <String , String >>>();
2020 Set <Object > contexts = null ;
2121 try {
2222 contexts = getContext ();
2323 } catch (Throwable throwable ) {
24- msg += "context error: " + getErrorMessage (throwable );
24+ msg . append ( "context error: " ). append ( getErrorMessage (throwable ) );
2525 }
2626 if (contexts == null || contexts .isEmpty ()) {
27- msg += "context not found\n " ;
27+ msg . append ( "context not found\n " ) ;
2828 } else {
2929 for (Object context : contexts ) {
3030 String contextRoot = getContextRoot (context );
31- List <Map <String , String >> filters = collectFiltersData (context );
32- allFiltersData .put (contextRoot , filters );
31+ try {
32+ List <Map <String , String >> filters = collectFiltersData (context );
33+ allFiltersData .put (contextRoot , filters );
34+ } catch (Throwable e ) {
35+ msg .append (contextRoot ).append (" failed " ).append (getErrorMessage (e )).append ("\n " );
36+ }
3337 }
34- msg += formatFiltersData (allFiltersData );
38+ msg . append ( formatFiltersData (allFiltersData ) );
3539 }
36- return msg ;
40+ return msg . toString () ;
3741 }
3842
39- private List <Map <String , String >> collectFiltersData (Object context ) {
40- List <Map <String , String >> result = new ArrayList <>();
41- try {
42- Object filterManager = getFieldValue (context , "filterManager" );
43- Map <String , Object > filters = (Map <String , Object >) getFieldValue (filterManager , "filters" );
44- List <Object > filterPatternList = (ArrayList <Object >) getFieldValue (filterManager , "filterPatternList" );
45- if (filterPatternList == null || filterPatternList .isEmpty ()) {
46- return Collections .emptyList ();
43+ @ SuppressWarnings ("unchecked" )
44+ private List <Map <String , String >> collectFiltersData (Object context ) throws Exception {
45+
46+ Object filterManager = getFieldValue (context , "filterManager" );
47+ Map <String , Object > filters = (Map <String , Object >) getFieldValue (filterManager , "filters" );
48+ List <Object > filterPatternList = (ArrayList <Object >) getFieldValue (filterManager , "filterPatternList" );
49+ List <Object > filterServletList = (ArrayList <Object >) getFieldValue (filterManager , "filterServletList" );
50+ Map <String , Map <String , Object >> aggregatedData = new LinkedHashMap <>();
51+ for (Object filterInfo : filterPatternList ) {
52+ Object urlMap = getFieldValue (filterInfo , "map" );
53+ String filterName = (String ) getFieldValue (filterInfo , "filterName" );
54+ if (filterName == null ) {
55+ // WebLogic 10.3.6
56+ Object [] mapValues = (Object []) invokeMethod (urlMap , "values" , null , null );
57+ filterName = ((String ) mapValues [0 ]);
4758 }
48- for (Object filterInfo : filterPatternList ) {
49- Map <String , String > info = new HashMap <>();
50- Object urlMap = getFieldValue (filterInfo , "map" );
51- String filterName = (String ) getFieldValue (filterInfo , "filterName" );
52- if (filterName == null ) {
59+ if (aggregatedData .get (filterName ) == null ) {
60+ Object filterWrapper = filters .get (filterName );
61+ String filterClassName = null ;
62+ try {
63+ filterClassName = (String ) getFieldValue (filterWrapper , "filterClassName" );
64+ } catch (NoSuchFieldException e ) {
5365 // WebLogic 10.3.6
54- Object [] mapValues = (Object []) invokeMethod (urlMap , "values" , null , null );
55- filterName = ((String ) mapValues [0 ]);
66+ filterClassName = (String ) getFieldValue (filterWrapper , "filterclass" );
5667 }
68+ if (filterClassName == null ) {
69+ Object filter = getFieldValue (filterWrapper , "filter" );
70+ if (filter != null ) {
71+ filterClassName = filter .getClass ().getName ();
72+ }
73+ }
74+ Map <String , Object > info = new HashMap <>();
75+ info .put ("filterName" , filterName );
76+ info .put ("filterClass" , filterClassName );
77+ info .put ("urlPatterns" , new LinkedHashSet <String >());
78+ info .put ("servletNames" , new LinkedHashSet <String >());
79+ aggregatedData .put (filterName , info );
80+ }
81+ Map <String , Object > info = aggregatedData .get (filterName );
82+ String [] urlPatterns = (String []) invokeMethod (urlMap , "keys" , null , null );
83+ if (urlPatterns != null ) {
84+ ((Set <String >) info .get ("urlPatterns" )).addAll (Arrays .asList (urlPatterns ));
85+ }
86+ }
87+ for (Object filterInfo : filterServletList ) {
88+ String filterName = (String ) getFieldValue (filterInfo , "filterName" );
89+ if (aggregatedData .get (filterName ) == null ) {
5790 Object filterWrapper = filters .get (filterName );
5891 String filterClassName = null ;
5992 try {
@@ -68,14 +101,29 @@ private List<Map<String, String>> collectFiltersData(Object context) {
68101 filterClassName = filter .getClass ().getName ();
69102 }
70103 }
104+ Map <String , Object > info = new HashMap <>();
71105 info .put ("filterName" , filterName );
72106 info .put ("filterClass" , filterClassName );
73- String [] urlPatterns = ( String []) invokeMethod ( urlMap , "keys " , null , null );
74- info .put ("urlPatterns " , Arrays . toString ( urlPatterns ));
75- result . add ( info );
107+ info . put ( "urlPatterns " , new LinkedHashSet < String >() );
108+ info .put ("servletNames " , new LinkedHashSet < String >( ));
109+ aggregatedData . put ( filterName , info );
76110 }
77- } catch (Exception e ) {
78- e .printStackTrace ();
111+ Map <String , Object > info = aggregatedData .get (filterName );
112+ String servletName = (String ) getFieldValue (filterInfo , "servletName" );
113+ if (servletName != null ) {
114+ ((Set <String >) info .get ("servletNames" )).add (servletName );
115+ }
116+ }
117+ List <Map <String , String >> result = new ArrayList <>();
118+ for (Map <String , Object > entry : aggregatedData .values ()) {
119+ Map <String , String > finalInfo = new HashMap <>();
120+ finalInfo .put ("filterName" , (String ) entry .get ("filterName" ));
121+ finalInfo .put ("filterClass" , (String ) entry .get ("filterClass" ));
122+ Set <?> urls = (Set <?>) entry .get ("urlPatterns" );
123+ finalInfo .put ("urlPatterns" , urls .isEmpty () ? "" : urls .toString ());
124+ Set <?> servletNames = (Set <?>) entry .get ("servletNames" );
125+ finalInfo .put ("servletNames" , servletNames .isEmpty () ? "" : servletNames .toString ());
126+ result .add (finalInfo );
79127 }
80128 return result ;
81129 }
@@ -96,6 +144,7 @@ private String formatFiltersData(Map<String, List<Map<String, String>>> allFilte
96144 appendIfPresent (output , "" , info .get ("filterName" ), "" );
97145 appendIfPresent (output , " -> " , info .get ("filterClass" ), "" );
98146 appendIfPresent (output , " -> URL:" , info .get ("urlPatterns" ), "" );
147+ appendIfPresent (output , " -> Servlet:" , info .get ("servletNames" ), "" );
99148 output .append ("\n " );
100149 }
101150 }
0 commit comments