diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java index 13b1e8adc..57de181f5 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java @@ -25,6 +25,11 @@ package com.pig4cloud.pigx.common.core.constant; */ public interface SecurityConstants { + /** + * 启动时是否检查Inner注解安全性 + */ + boolean INNER_CHECK = true; + /** * 刷新 */ diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PermitAllUrlResolver.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PermitAllUrlResolver.java index b62131845..d98946f9a 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PermitAllUrlResolver.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PermitAllUrlResolver.java @@ -21,6 +21,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; +import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.security.annotation.Inner; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -34,7 +35,8 @@ import org.springframework.core.annotation.AnnotationUtils; import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.PathMatcher; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.method.HandlerMethod; @@ -59,6 +61,8 @@ import java.util.stream.Collectors; @ConfigurationProperties(prefix = "security.oauth2.client") public class PermitAllUrlResolver implements InitializingBean { + private static final PathMatcher PATHMATCHER = new AntPathMatcher(); + private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}"); private final WebApplicationContext applicationContext; @@ -81,9 +85,8 @@ public class PermitAllUrlResolver implements InitializingBean { // 2. 当类上不包含 @Inner 注解则获取该方法的注解 if (controller == null) { Inner method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Inner.class); - RequestMapping rq = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), RequestMapping.class); Optional.ofNullable(method).ifPresent( - inner -> info.getPatternsCondition().getPatterns().forEach(url -> this.filterPath(url, rq))); + inner -> info.getPatternsCondition().getPatterns().forEach(url -> this.filterPath(url, info, map))); continue; } @@ -92,8 +95,7 @@ public class PermitAllUrlResolver implements InitializingBean { Method[] methods = beanType.getDeclaredMethods(); Method method = handlerMethod.getMethod(); if (ArrayUtil.contains(methods, method)) { - RequestMapping rq = AnnotationUtils.findAnnotation(method, RequestMapping.class); - info.getPatternsCondition().getPatterns().forEach(url -> filterPath(url, rq)); + info.getPatternsCondition().getPatterns().forEach(url -> filterPath(url, info, map)); } } @@ -102,14 +104,21 @@ public class PermitAllUrlResolver implements InitializingBean { /** * 过滤 Inner 设置 * + *
0. 暴露安全检查
*1. 路径转换: 如果为restful(/xx/{xx}) --> /xx/* ant 表达式
*2. 构建表达式:允许暴露的接口|允许暴露的方法类型,允许暴露的方法类型 URL|GET,POST,DELETE,PUT
* - * @param url mapping路径 - * @param rq 请求犯法 + * @param url mapping路径 + * @param info 请求犯法 + * @param map 路由映射信息 */ - private void filterPath(String url, RequestMapping rq) { - List