我想在我的 URL 中排除一个特定的字符串。我已经使用在线 reg 测试器测试了正则表达式并且它有效。
但是,当我访问该URL时,似乎struts2仍在处理请求。
我是否错误地配置了我的排除?
<constant name="struts.action.excludePattern" value="\/mystring$"/>
我从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/