Pre Merge pull request !21 from DokiYoloo/master

pull/21/MERGE
DokiYoloo 5 years ago committed by Gitee
commit 4940ba3a4f

@ -0,0 +1,82 @@
package com.ruoyi.common.core.utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.regex.Pattern;
/**
* URL
*
* @author DokiYolo
*/
public class AuthUtils {
private static String getRegPath(String path) {
char[] chars = path.toCharArray();
int len = chars.length;
StringBuilder sb = new StringBuilder();
boolean preX = false;
for (int i = 0; i < len; i++) {
//遇到*字符
if (chars[i] == '*') {
//如果是第二次遇到*,则将**替换成.*
if (preX) {
sb.append(".*");
preX = false;
//如果是遇到单星,且单星是最后一个字符,则直接将*转成[^/]*
} else if (i + 1 == len) {
sb.append("[^/]*");
//否则单星后面还有字符,则不做任何动作,下一把再做动作
} else {
preX = true;
}
//遇到非*字符
} else {
//如果上一把是*,则先把上一把的*对应的[^/]*添进来
if (preX) {
sb.append("[^/]*");
preX = false;
}
//接着判断当前字符是不是?,是的话替换成.
if (chars[i] == '?') {
sb.append('.');
//不是?的话,则就是普通字符,直接添进来
} else {
sb.append(chars[i]);
}
}
}
return sb.toString();
}
/**
*
*
* @param excludePath -
* @param reqUrl -
* @return true/false
*/
private static boolean filterUrls(String excludePath, String reqUrl) {
String regPath = getRegPath(excludePath);
return Pattern.compile(regPath).matcher(reqUrl).matches();
}
/**
*
*
* @param excludeUrls -
* @param reqUrl -
*
* @return true/false
*/
public static boolean checkWhiteList(Collection<String> excludeUrls, String reqUrl) {
for (String excludeUrl : excludeUrls) {
if (filterUrls(excludeUrl, reqUrl)) {
return true;
}
}
return false;
}
}

@ -2,6 +2,8 @@ package com.ruoyi.gateway.filter;
import java.util.Arrays;
import javax.annotation.Resource;
import com.ruoyi.common.core.utils.AuthUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
@ -44,8 +46,7 @@ public class AuthFilter implements GlobalFilter, Ordered
{
String url = exchange.getRequest().getURI().getPath();
// 跳过不需要验证的路径
if (Arrays.asList(whiteList).contains(url))
{
if(AuthUtils.checkWhiteList(Arrays.asList(whiteList),url)){
return chain.filter(exchange);
}
String token = getToken(exchange.getRequest());

Loading…
Cancel
Save