java
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();}