Struts2 透過 struts.xml 中的 struts.action.excludePattern 常量定義排除規則,採用正則表達式匹配 URI,命中則跳過 Action 處理鏈。典型配置如下:
<constant name="struts.action.excludePattern"
value="/com.attilax/core/approot_js.jsp,.*\.jsp,/api.jsp,/com\.attilax/.*,/static/.*,/dwr/.*,/dwr/test/.*,/spr/.*,/eqMntRun.jsp,/vod/eqMntRun.jsp,/comm/*" />
struts.xml 解析 excludePattern 值Pattern 列表request.getRequestURI() 逐一匹配true,標記為排除請求在業務 Filter 中引入排除判斷,避免靜態資源、登入頁等被攔截:
private boolean isnotExtUrl(HttpServletRequest request) {
String strutsXml = pathx.classPath() + "/struts.xml";
String patts = StrutsX.get_excludePattern(strutsXml);
return !new StrutsX().isUrlExcluded(request, patts);
}
get_excludePattern():使用 Dom4j 解析 XML 獲取配置值buildExcludedPatternsList():將字串轉為不可變的 List<Pattern>isUrlExcluded():提供單一 Pattern 與 Pattern 列表兩種重載private List<Pattern> buildExcludedPatternsList(String patterns) {
if (patterns != null && patterns.trim().length() != 0) {
List<Pattern> list = new ArrayList<>();
for (String token : patterns.split(",")) {
list.add(Pattern.compile(token.trim()));
}
return Collections.unmodifiableList(list);
}
return null;
}
/static/*, /css/*, /js/*)納入排除