diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java b/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java index efa57c5f..1aa86328 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java @@ -1,8 +1,10 @@ package cn.dev33.satoken.action; +import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; import java.util.List; import java.util.UUID; +import java.util.regex.Pattern; import cn.dev33.satoken.SaManager; import cn.dev33.satoken.annotation.SaCheckLogin; @@ -71,14 +73,11 @@ public class SaTokenActionDefaultImpl implements SaTokenAction { if(list == null || list.size() == 0) { return false; } - // 遍历匹配 - for (String patt : list) { - if(SaFoxUtil.vagueMatch(patt, element)) { - return true; - } + if (list.contains(element)) { + return true; + }else{ + return list.stream().anyMatch(patt-> Pattern.matches(patt.replaceAll("\\*", ".*"), element)); } - // 走出for循环说明没有一个元素可以匹配成功 - return false; } /** @@ -89,44 +88,29 @@ public class SaTokenActionDefaultImpl implements SaTokenAction { // 获取这个 Method 所属的 Class Class clazz = method.getDeclaringClass(); - - - // 从 Class 校验 @SaCheckLogin 注解 - if(clazz.isAnnotationPresent(SaCheckLogin.class)) { - SaCheckLogin at = clazz.getAnnotation(SaCheckLogin.class); + + validateAnnotation(clazz); + validateAnnotation(method); + } + + private void validateAnnotation(AnnotatedElement target) { + // 校验 @SaCheckLogin 注解 + if(target.isAnnotationPresent(SaCheckLogin.class)) { + SaCheckLogin at = target.getAnnotation(SaCheckLogin.class); SaManager.getStpLogic(at.key()).checkByAnnotation(at); } - // 从 Class 校验 @SaCheckRole 注解 - if(clazz.isAnnotationPresent(SaCheckRole.class)) { - SaCheckRole at = clazz.getAnnotation(SaCheckRole.class); + // 校验 @SaCheckRole 注解 + if(target.isAnnotationPresent(SaCheckRole.class)) { + SaCheckRole at = target.getAnnotation(SaCheckRole.class); SaManager.getStpLogic(at.key()).checkByAnnotation(at); } - // 从 Class 校验 @SaCheckPermission 注解 - if(clazz.isAnnotationPresent(SaCheckPermission.class)) { - SaCheckPermission at = clazz.getAnnotation(SaCheckPermission.class); + // 校验 @SaCheckPermission 注解 + if(target.isAnnotationPresent(SaCheckPermission.class)) { + SaCheckPermission at = target.getAnnotation(SaCheckPermission.class); SaManager.getStpLogic(at.key()).checkByAnnotation(at); } - - // 从 Method 校验 @SaCheckLogin 注解 - if(method.isAnnotationPresent(SaCheckLogin.class)) { - SaCheckLogin at = method.getAnnotation(SaCheckLogin.class); - SaManager.getStpLogic(at.key()).checkByAnnotation(at); - } - - // 从 Method 校验 @SaCheckRole 注解 - if(method.isAnnotationPresent(SaCheckRole.class)) { - SaCheckRole at = method.getAnnotation(SaCheckRole.class); - SaManager.getStpLogic(at.key()).checkByAnnotation(at); - } - - // 从 Method 校验 @SaCheckPermission 注解 - if(method.isAnnotationPresent(SaCheckPermission.class)) { - SaCheckPermission at = method.getAnnotation(SaCheckPermission.class); - SaManager.getStpLogic(at.key()).checkByAnnotation(at); - } - } } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfigFactory.java b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfigFactory.java index fb2f1d1e..23ebdd81 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfigFactory.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfigFactory.java @@ -94,9 +94,7 @@ public class SaTokenConfigFactory { Object valueConvert = getObjectByClass(value, field.getType()); field.setAccessible(true); field.set(obj, valueConvert); - } catch (IllegalArgumentException e) { - throw new RuntimeException("属性赋值出错:" + field.getName(), e); - } catch (IllegalAccessException e) { + } catch (IllegalArgumentException | IllegalAccessException e) { throw new RuntimeException("属性赋值出错:" + field.getName(), e); } } @@ -112,23 +110,21 @@ public class SaTokenConfigFactory { */ @SuppressWarnings("unchecked") private static T getObjectByClass(String str, Class cs) { - Object value = null; - if (str == null) { - value = null; - } else if (cs.equals(String.class)) { + Object value; + if (cs.equals(String.class)) { value = str; } else if (cs.equals(int.class) || cs.equals(Integer.class)) { - value = new Integer(str); + value = Integer.valueOf(str); } else if (cs.equals(long.class) || cs.equals(Long.class)) { - value = new Long(str); + value = Long.valueOf(str); } else if (cs.equals(short.class) || cs.equals(Short.class)) { - value = new Short(str); + value = Short.valueOf(str); } else if (cs.equals(float.class) || cs.equals(Float.class)) { - value = new Float(str); + value = Float.valueOf(str); } else if (cs.equals(double.class) || cs.equals(Double.class)) { - value = new Double(str); + value = Double.valueOf(str); } else if (cs.equals(boolean.class) || cs.equals(Boolean.class)) { - value = new Boolean(str); + value = Boolean.valueOf(str); } else { throw new RuntimeException("未能将值:" + str + ",转换类型为:" + cs, null); } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaFoxUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaFoxUtil.java index 7569efd8..6cbb1e0e 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaFoxUtil.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaFoxUtil.java @@ -130,21 +130,4 @@ public class SaFoxUtil { return list2; } - /** - * 字符串模糊匹配 - *

example: - *

user* user-add -- true - *

user* art-add -- false - * @param patt 表达式 - * @param str 待匹配的字符串 - * @return 是否可以匹配 - */ - public static boolean vagueMatch(String patt, String str) { - // 如果表达式不带有*号,则只需简单equals即可 (速度提升200倍) - if(patt.indexOf("*") == -1) { - return patt.equals(str); - } - return Pattern.matches(patt.replaceAll("\\*", ".*"), str); - } - }