From 60c815ab76306c6edf1e1f8511b14c168761a9c9 Mon Sep 17 00:00:00 2001
From: JuJu <857815116@qq.com>
Date: Sun, 28 Feb 2021 17:21:02 +0800
Subject: [PATCH] 修复部分更新方法过滤失败与单*匹配不精确问题

---
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java |   34 +++++++++++++++++++++++++---------
 1 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java
index b150169..954dd03 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java
@@ -21,6 +21,9 @@
     /** 星号 */
     private static final String START = "*";
 
+    /** 斜杠 */
+    private static final String SLASH = "/";
+
     /**
      * 获取参数不为空值
      * 
@@ -477,22 +480,27 @@
 
             // 匹配前缀Pattern
             result = remainingURI.contains(prefixPattern);
-            // 已经没有星号,判断长度是否符合,并返回
-            if (formerStarOffset == -1)
-            {
-                //清洗请求路径
-                if (remainingURI.endsWith("/")) {
-                    remainingURI = remainingURI.substring(0, remainingURI.length() - 1);
-                }
-                return remainingURI.length() == prefixPattern.length();
-            }
 
             // 匹配失败,直接返回
             if (!result)
                 return false;
 
+            // 已经没有星号,判断长度是否符合,并返回
+            if (formerStarOffset == -1)
+            {
+                // 清洗请求路径
+                if (remainingURI.endsWith(SLASH)) {
+                    remainingURI = remainingURI.substring(0, remainingURI.length() - 1);
+                }
+                return remainingURI.length() == prefixPattern.length();
+            }
+
             if (!isEmpty(prefixPattern))
             {
+                // 如果前面还有路径 直接返回
+                if (!isEmpty(substringBefore(str, prefixPattern))) {
+                    return false;
+                }
                 remainingURI = substringAfter(str, prefixPattern);
             }
 
@@ -500,6 +508,14 @@
             latterStarOffset = indexOf(pattern, START, formerStarOffset + 1);
             suffixPattern = substring(pattern, formerStarOffset + 1, latterStarOffset > -1 ? latterStarOffset : pattern.length());
 
+            // 判断是否存在第二个 *
+            if (latterStarOffset == -1) {
+                // 判断是否还包含斜杠
+                if(remainingURI.contains(SLASH)) {
+                    return false;
+                }
+            }
+
             result = remainingURI.contains(suffixPattern);
             // 匹配失败,直接返回
             if (!result)

--
Gitblit v1.9.3