获取PreAuthorize注解的权限标识列表

This commit is contained in:
阿沐 2025-01-13 10:47:04 +08:00
parent 2747d0e21a
commit f6e3577573

View File

@ -0,0 +1,53 @@
package net.maku.framework.security.utils;
import cn.hutool.extra.spring.SpringUtil;
import org.springframework.context.ApplicationContext;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* SpringSecurity @PreAuthorize 注解 权限标识
*
* @author 阿沐 babamu@126.com
* <a href="https://maku.net">MAKU</a>
*/
public class PreAuthorizeUtil {
/**
* 获取 @PreAuthorize 注解的权限标识列表
*
* @return 权限标识列表
*/
public static List<String> getPreAuthorizeList() {
List<String> authorities = new ArrayList<>();
ApplicationContext context = SpringUtil.getApplicationContext();
String[] beanNames = context.getBeanNamesForAnnotation(Controller.class);
for (String beanName : beanNames) {
Object bean = context.getBean(beanName);
Method[] methods = bean.getClass().getDeclaredMethods();
for (Method method : methods) {
PreAuthorize preAuthorize = AnnotationUtils.findAnnotation(method, PreAuthorize.class);
if (preAuthorize != null) {
String value = preAuthorize.value();
// 使用正则表达式提取权限字符串
Pattern pattern = Pattern.compile("hasAuthority\\('([^']*)'\\)");
Matcher matcher = pattern.matcher(value);
while (matcher.find()) {
String authority = matcher.group(1);
authorities.add(authority);
}
}
}
}
return authorities;
}
}