这里主要是扫描自定义注解
public class AnnotationScan implements ApplicationListener<ContextRefreshedEvent>{ @Autowired RedisTemplate redisTemplate; private final static Logger logger = LoggerFactory.getLogger(AnnotationScan.class); /** * 初始化方法 * @param event */ @Override public void onApplicationEvent(ContextRefreshedEvent event) { HashSet<String> set = new HashSet<>();//权限点集合 if(event.getApplicationContext().getParent() == null) { Map<String, Object> beans = event.getApplicationContext().getBeansWithAnnotation(RestController.class);//获取全部ControllerBean Set<Map.Entry<String, Object>> entries = beans.entrySet();//遍历Bean Iterator<Map.Entry<String, Object>> iterator = entries.iterator(); while(iterator.hasNext()){ Map.Entry<String, Object> map = iterator.next(); Class<?> aClass = map.getValue().getClass(); Method[] methods = aClass.getMethods(); for (Method method: methods ) { AuthAnnotation annotation = method.getAnnotation(AuthAnnotation.class); if(annotation==null){//有无权限注解 logger.warn("未作权限限制"); }else{ String[] authorities = annotation.authorities(); for (String authority: authorities ) { set.add(authority);//遍历权限点,放入集合中 } } } } } }
配置类
@Bean public AnnotationScan annotationScan(){return new AnnotationScan();}
原博客地址:https://blog.csdn.net/github_39525088/article/details/75304357