@@ -13,51 +13,82 @@ public class UndertowFilterProbe {
1313
1414 @ Override
1515 public String toString () {
16- String msg = "" ;
16+ StringBuilder msg = new StringBuilder () ;
1717 Map <String , List <Map <String , String >>> allFiltersData = new LinkedHashMap <String , List <Map <String , String >>>();
1818 Set <Object > contexts = null ;
1919 try {
2020 contexts = getContext ();
2121 } catch (Throwable throwable ) {
22- msg += "context error: " + getErrorMessage (throwable );
22+ msg . append ( "context error: " ). append ( getErrorMessage (throwable ) );
2323 }
2424 if (contexts == null || contexts .isEmpty ()) {
25- msg += "context not found\n " ;
25+ msg . append ( "context not found\n " ) ;
2626 } else {
2727 for (Object context : contexts ) {
2828 String contextRoot = getContextRoot (context );
29- List <Map <String , String >> filters = collectFiltersData (context );
30- allFiltersData .put (contextRoot , filters );
29+ try {
30+ List <Map <String , String >> filters = collectFiltersData (context );
31+ allFiltersData .put (contextRoot , filters );
32+ } catch (Throwable e ) {
33+ msg .append (contextRoot ).append (" failed " ).append (getErrorMessage (e )).append ("\n " );
34+ }
3135 }
32- msg += formatFiltersData (allFiltersData );
36+ msg . append ( formatFiltersData (allFiltersData ) );
3337 }
34- return msg ;
38+ return msg . toString () ;
3539 }
3640
37- private List <Map <String , String >> collectFiltersData (Object context ) {
38- List <Map <String , String >> result = new ArrayList <>();
39- try {
40- Object deploymentInfo = getFieldValue (context , "deploymentInfo" );
41- if (deploymentInfo == null ) return Collections .emptyList ();
42-
43- Map <String , Object > filters = (Map <String , Object >) getFieldValue (deploymentInfo , "filters" );
44-
45- if (filters == null || filters .isEmpty ()) return Collections .emptyList ();
46-
47- List <Object > filterUrlMappings = (List <Object >) getFieldValue (deploymentInfo , "filterUrlMappings" );
48- // List<Object> filterServletNameMappings = (List<Object>) getFieldValue(deploymentInfo, "filterServletNameMappings");
49-
50- for (Object filterUrlMapping : filterUrlMappings ) {
51- Map <String , String > info = new HashMap <>();
52- String filterName = (String ) getFieldValue (filterUrlMapping , "filterName" );
53- String urlPattern = (String ) getFieldValue (filterUrlMapping , "mapping" );
54- Class <?> filterClass = (Class <?>) getFieldValue (filters .get (filterName ), "filterClass" );
41+ @ SuppressWarnings ("unchecked" )
42+ private List <Map <String , String >> collectFiltersData (Object context ) throws Exception {
43+ Map <String , Map <String , Object >> aggregatedData = new LinkedHashMap <>();
44+ Object deploymentInfo = getFieldValue (context , "deploymentInfo" );
45+ Map <String , Object > filters = (Map <String , Object >) getFieldValue (deploymentInfo , "filters" );
46+ List <Object > filterUrlMappings = (List <Object >) getFieldValue (deploymentInfo , "filterUrlMappings" );
47+ List <Object > filterServletNameMappings = (List <Object >) getFieldValue (deploymentInfo , "filterServletNameMappings" );
48+ for (Object filterUrlMapping : filterUrlMappings ) {
49+ String filterName = (String ) getFieldValue (filterUrlMapping , "filterName" );
50+ Class <?> filterClass = (Class <?>) getFieldValue (filters .get (filterName ), "filterClass" );
51+ if (aggregatedData .get (filterName ) == null ) {
52+ Map <String , Object > info = new HashMap <>();
5553 info .put ("filterName" , filterName );
56- info .put ("urlPatterns" , urlPattern );
5754 info .put ("filterClass" , filterClass .getName ());
58- result .add (info );
55+ info .put ("urlPatterns" , new LinkedHashSet <String >());
56+ info .put ("servletNames" , new LinkedHashSet <String >());
57+ aggregatedData .put (filterName , info );
5958 }
60- } catch (Exception ignored ) {
59+ Map <String , Object > info = aggregatedData .get (filterName );
60+ String urlPattern = (String ) getFieldValue (filterUrlMapping , "mapping" );
61+ if (urlPattern != null ) {
62+ ((Set <String >) info .get ("urlPatterns" )).add (urlPattern );
63+ }
64+ }
65+ for (Object filterServletNameMapping : filterServletNameMappings ) {
66+ String filterName = (String ) getFieldValue (filterServletNameMapping , "filterName" );
67+ Class <?> filterClass = (Class <?>) getFieldValue (filters .get (filterName ), "filterClass" );
68+ if (aggregatedData .get (filterName ) == null ) {
69+ Map <String , Object > info = new HashMap <>();
70+ info .put ("filterName" , filterName );
71+ info .put ("filterClass" , filterClass .getName ());
72+ info .put ("urlPatterns" , new LinkedHashSet <String >());
73+ info .put ("servletNames" , new LinkedHashSet <String >());
74+ aggregatedData .put (filterName , info );
75+ }
76+ Map <String , Object > info = aggregatedData .get (filterName );
77+ String servletNames = (String ) getFieldValue (filterServletNameMapping , "mapping" );
78+ if (servletNames != null ) {
79+ ((Set <String >) info .get ("servletNames" )).add (servletNames );
80+ }
81+ }
82+ List <Map <String , String >> result = new ArrayList <>();
83+ for (Map <String , Object > entry : aggregatedData .values ()) {
84+ Map <String , String > finalInfo = new HashMap <>();
85+ finalInfo .put ("filterName" , (String ) entry .get ("filterName" ));
86+ finalInfo .put ("filterClass" , (String ) entry .get ("filterClass" ));
87+ Set <?> urls = (Set <?>) entry .get ("urlPatterns" );
88+ finalInfo .put ("urlPatterns" , urls .isEmpty () ? "" : urls .toString ());
89+ Set <?> servletNames = (Set <?>) entry .get ("servletNames" );
90+ finalInfo .put ("servletNames" , servletNames .isEmpty () ? "" : servletNames .toString ());
91+ result .add (finalInfo );
6192 }
6293 return result ;
6394 }
@@ -77,7 +108,8 @@ private String formatFiltersData(Map<String, List<Map<String, String>>> allFilte
77108 for (Map <String , String > info : filters ) {
78109 appendIfPresent (output , "" , info .get ("filterName" ), "" );
79110 appendIfPresent (output , " -> " , info .get ("filterClass" ), "" );
80- appendIfPresent (output , " -> URL:[" , info .get ("urlPatterns" ), "]" );
111+ appendIfPresent (output , " -> URL:" , info .get ("urlPatterns" ), "" );
112+ appendIfPresent (output , " -> Servlet:" , info .get ("servletNames" ), "" );
81113 output .append ("\n " );
82114 }
83115 }
0 commit comments