未验证 提交 f48b95b7 编写于 作者: sinat_25235033's avatar sinat_25235033 提交者: GitHub

Merge pull request #6 from tomsun28/fix-path-match-#5

fix  the pattern `**` can not turn null when it in last --- fix #5
......@@ -158,12 +158,23 @@ public class TirePathTree {
if (isNoMatchString(current.getData(), urlPac[currentFlow])) {
return null;
}
if (currentFlow == urlPac.length - 1 && NODE_TYPE_MAY_PATH_END.equals(current.getNodeType())) {
if (currentFlow == urlPac.length - 1 && (NODE_TYPE_MAY_PATH_END.equals(current.getNodeType()))) {
Node methodNode = current.getChildren().get(method);
if (methodNode != null && NODE_TYPE_METHOD.equals(methodNode.getNodeType())) {
return methodNode.getChildren().keySet().iterator().next();
if (methodNode != null) {
if (NODE_TYPE_METHOD.equals(methodNode.getNodeType())) {
return methodNode.getChildren().keySet().iterator().next();
}
} else {
return null;
Node nextNode = current.getChildren().get(MATCH_ONE);
if (nextNode == null) {
nextNode = current.getChildren().get(MATCH_ALL);
}
if (nextNode != null && NODE_TYPE_MAY_PATH_END.equals(nextNode.getNodeType())) {
methodNode = nextNode.getChildren().get(method);
if (methodNode != null && NODE_TYPE_METHOD.equals(methodNode.getNodeType())) {
return methodNode.getChildren().keySet().iterator().next();
}
}
}
}
......@@ -274,13 +285,19 @@ public class TirePathTree {
String method = tmp[1];
String supportRoles = tmp[2];
Node current = rootNode;
Node pre = current;
// 开始插入URL节点
for (String urlData : urlPac) {
if (!current.getChildren().containsKey(urlData)) {
current.insertChild(urlData);
}
pre = current;
current = current.getChildren().get(urlData);
}
if (MATCH_ONE.equals(current.getData()) || MATCH_ALL.equals(current.getData())) {
// 当倒数第一个为 * 或者 ** 时,其有可能匹配空,此时其前一个也可能为 NODE_TYPE_MAY_PATH_END
pre.setNodeType(NODE_TYPE_MAY_PATH_END);
}
// 设置NODE_TYPE_MAY_PATH_END节点类型
current.setNodeType(NODE_TYPE_MAY_PATH_END);
// 开始插入httpMethod节点,如果已经存在,则不覆盖修改原来配置
......
......@@ -60,8 +60,9 @@ public class TirePathTreeTest {
paths.add("/api/demo/book/**/egg===get===[role2]");
paths.add("/**===get===[role9]");
paths.add("/er/**/swagger===get===[role10]");
paths.add("/swagger/**===get===[role11]");
root.buildTree(paths);
Assert.assertEquals(21, root.getResourceNum());
Assert.assertEquals(22, root.getResourceNum());
}
@Test
......@@ -95,6 +96,7 @@ public class TirePathTreeTest {
Assert.assertEquals("[role9]", root.searchPathFilterRoles("/api/v5/mom/ha===get"));
Assert.assertEquals("[role10]", root.searchPathFilterRoles("/er/swagger===get"));
Assert.assertNull(root.searchPathFilterRoles("/api/v6/book/ha/good===put"));
Assert.assertEquals("[role11]", root.searchPathFilterRoles("/swagger===get"));
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册