java - struts.action.excludePattern 不工作

标签 java regex struts2

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

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

我是否错误地配置了我的排除?

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

enter image description here

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

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 字符串,所以你应该在开始时让你的模式变得贪婪。

关于java - struts.action.excludePattern 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39330329/

相关文章:

java - 我们可以使用 Spring Boot 实现 Java 库吗?

java - 如何在 ant 的 build.xml 中的目标标记内添加属性标记

java - 适用于 Android 的 Fortumo 应用内支付

php - 比较两个名称字符串 php

java - 刷新<s :select> tag on changing backing Java collection in Struts 2

java - Java 中 LinkedList 的意外行为

c++ - 由于链接错误,我无法构建 boost_regex 代码

regex - 如何将反斜杠添加到get_option()

jsp - Struts2,字符串空检查

javascript - jQuery .load 复制 div