From 0ca4badb77ace535e526c923981f131d29889bca Mon Sep 17 00:00:00 2001 From: EightMonth Date: Fri, 22 Mar 2024 16:37:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#6021?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jeecg/config/shiro/ShiroConfig.java | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index 509614c9..37966725 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java @@ -16,18 +16,18 @@ import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.JeecgBaseConfig; import org.jeecg.config.shiro.filters.CustomShiroFilterFactoryBean; import org.jeecg.config.shiro.filters.JwtFilter; -import org.springframework.aop.framework.Advised; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.core.env.Environment; +import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -39,7 +39,6 @@ import javax.annotation.Resource; import javax.servlet.DispatcherType; import javax.servlet.Filter; import java.lang.reflect.Method; -import java.time.Duration; import java.util.*; /** @@ -60,9 +59,6 @@ public class ShiroConfig { private JeecgBaseConfig jeecgBaseConfig; @Autowired(required = false) private RedisProperties redisProperties; - - @Autowired - private ApplicationContext ctx; /** * Filter Chain定义说明 * @@ -178,7 +174,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/WW_verify*", "anon"); // 通过注解免登录url - List ignoreAuthUrlList = collectIgnoreAuthUrl(ctx); + List ignoreAuthUrlList = collectIgnoreAuthUrl(); if (!CollectionUtils.isEmpty(ignoreAuthUrlList)) { for (String url : ignoreAuthUrlList) { filterChainDefinitionMap.put(url, "anon"); @@ -339,20 +335,22 @@ public class ShiroConfig { @SneakyThrows - public List collectIgnoreAuthUrl(ApplicationContext context) { + public List collectIgnoreAuthUrl() { List ignoreAuthUrls = new ArrayList<>(); - Map controllers = context.getBeansWithAnnotation(RestController.class); - for (Object bean : controllers.values()) { - if (!(bean instanceof Advised)) { - continue; - } - Class beanClass = ((Advised) bean).getTargetSource().getTarget().getClass(); - RequestMapping base = beanClass.getAnnotation(RequestMapping.class); + ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); + provider.addIncludeFilter(new AnnotationTypeFilter(RestController.class)); + + String basePackage = "org.jeecg"; // 替换为你的包路径 + Set components = provider.findCandidateComponents(basePackage); + for (BeanDefinition component : components) { + String beanClassName = component.getBeanClassName(); + Class clazz = Class.forName(beanClassName); + RequestMapping base = clazz.getAnnotation(RequestMapping.class); String[] baseUrl = {}; if (Objects.nonNull(base)) { baseUrl = base.value(); } - Method[] methods = beanClass.getDeclaredMethods(); + Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { if (method.isAnnotationPresent(IgnoreAuth.class) && method.isAnnotationPresent(RequestMapping.class)) {