首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Struts2 URL 排除機制深度解析:從配置原理到自定義 Filter 實戰

     編輯:Java 綜合教學

核心原理:struts.action.excludePattern 配置解析

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/*" />

實現流程

  1. 讀取 struts.xml 解析 excludePattern 值
  2. 按逗號分割為多個正則規則,編譯為 Pattern 列表
  3. 請求到達時,提取 request.getRequestURI() 逐一匹配
  4. 任一匹配成功即返回 true,標記為排除請求

自定義 Filter 整合實戰

在業務 Filter 中引入排除判斷,避免靜態資源、登入頁等被攔截:

private boolean isnotExtUrl(HttpServletRequest request) {
    String strutsXml = pathx.classPath() + "/struts.xml";
    String patts = StrutsX.get_excludePattern(strutsXml);
    return !new StrutsX().isUrlExcluded(request, patts);
}

StrutsX 核心工具類

  • 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/*)納入排除
  • 避免過度複雜的正則,影響匹配效能
  • 單元測試覆蓋邊界情況(含/不含 ContextPath、大小寫敏感等)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved