fix: 修复缓存 CRUD API 权限前缀偶发性缺失元素的问题

This commit is contained in:
2025-08-04 20:56:44 +08:00
parent 3551d16f24
commit df6e294cbd

View File

@@ -47,6 +47,7 @@ import top.continew.starter.core.util.validation.CheckUtils;
import top.continew.starter.extension.crud.annotation.CrudRequestMapping; import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
import java.util.*; import java.util.*;
import java.util.stream.Stream;
/** /**
* Sa-Token 配置 * Sa-Token 配置
@@ -110,7 +111,7 @@ public class SaTokenConfiguration {
@EventListener(ApplicationReadyEvent.class) @EventListener(ApplicationReadyEvent.class)
public void configureSaTokenExcludes() { public void configureSaTokenExcludes() {
String[] beanNames = applicationContext.getBeanDefinitionNames(); String[] beanNames = applicationContext.getBeanDefinitionNames();
List<String> additionalExcludes = Arrays.stream(beanNames).parallel().map(beanName -> { List<String> additionalExcludes = Arrays.stream(beanNames).map(beanName -> {
Object bean = applicationContext.getBean(beanName); Object bean = applicationContext.getBean(beanName);
Class<?> clazz = bean.getClass(); Class<?> clazz = bean.getClass();
if (AopUtils.isAopProxy(bean)) { if (AopUtils.isAopProxy(bean)) {
@@ -130,10 +131,10 @@ public class SaTokenConfiguration {
}).filter(Objects::nonNull).toList(); }).filter(Objects::nonNull).toList();
if (!additionalExcludes.isEmpty()) { if (!additionalExcludes.isEmpty()) {
// 合并现有的 excludes 和新扫描到的 // 合并现有的 excludes 和新扫描到的
List<String> allExcludes = new ArrayList<>(Arrays.asList(properties.getSecurity().getExcludes())); String[] existingExcludes = Optional.ofNullable(properties.getSecurity().getExcludes()).orElse(new String[0]);
allExcludes.addAll(additionalExcludes); String[] combinedExcludes = Stream.concat(Arrays.stream(existingExcludes), additionalExcludes.stream())
// 转回数组 .toArray(String[]::new);
properties.getSecurity().setExcludes(allExcludes.toArray(new String[0])); properties.getSecurity().setExcludes(combinedExcludes);
} }
log.debug("缓存 CRUD API 权限前缀完成:{}", CrudApiPermissionPrefixCache.getAll().values()); log.debug("缓存 CRUD API 权限前缀完成:{}", CrudApiPermissionPrefixCache.getAll().values());
} }