struts.action.excludePattern 不工作

struts.action.excludePattern not working

我想在 URL 中排除特定字符串。我已经使用在线 reg 测试器测试了正则表达式并且它有效。

但是,当我访问 URL 时,似乎 struts2 仍在处理请求。

我的排除设置有误吗?

<constant name="struts.action.excludePattern" value="\/mystring$"/>

我从 struts2 框架中提取了以下代码并创建了我自己的测试 class 来测试正则表达式。

public static List<Pattern> buildExcludedPatternsList(String patterns) {
    if ((null != patterns) && (patterns.trim().length() != 0)) {
        List<Pattern> list = new ArrayList();
        String[] tokens = patterns.split(",");
        for (String token : tokens) {
            System.out.println("Token=" + token);
            list.add(Pattern.compile(token.trim()));
        }
        return Collections.unmodifiableList(list);
    }
    return null;
}


public static boolean isUrlExcluded(String uri, List<Pattern> excludedPatterns) {
    if (excludedPatterns != null) {
        for (Pattern pattern : excludedPatterns) {
            if (pattern.matcher(uri).matches()) {
                return true;
            }
        }
    }
    return false;
}

错误。模式应该是

<constant name="struts.action.excludePattern" value=".*/mystring$"/>

此模式已编译并与 URI 匹配。代码

String uri = RequestUtils.getUri(request);
for ( Pattern pattern : excludedPatterns ) {
    if (pattern.matcher(uri).matches()) {
        return true;
    }
}
return false;

因为它匹配整个 URI 字符串,所以您应该在开始时让您的模式变得贪婪。