关于组合注解 和 AOP的一些问题

OLESHI 发布于 2017/08/03 15:19
阅读 358
收藏 0

自定义了一个注解@Authority ,利用拦截器对生明了@Authority注解的url进行权限拦截,因为经常和@Controller合并使用,所以又定义了一个组合注解@AuthorityController。

然后问题就出现了,拦截器中只做了判断如下判断

if (clazz.isAnnotationPresent(Authority.class)) {  
                return true;  
        }  

如果不改成if (clazz.isAnnotationPresent(Authority.class) || clazz.isAnnotationPresent(AuthorityController.class)) {  
                return true;  
        }  

就不能识别AuthorityController。

求问如何修改,才能判断只要含有@Authority这个注解就返回true ?

========补充=====

猜想,@AuthorityController包含@Controller,能当@Controller使用,那么我的问题应该可以解决,但是不清楚咋实现。。。

加载中
0
O
OLESHI

哈哈解决了,,,,

    private boolean hasAuthorityAnnotation(String className){
        AnnotationMetadataReadingVisitor visitor = new AnnotationMetadataReadingVisitor(
                Thread.currentThread().getContextClassLoader());
        try {
            // 创建ASM的ClassReader
            ClassReader classReader = new ClassReader(className);
            // 调用reader的接受方法,这个方法实际就是解析class字节码的实现,这里使用了Visitor模式
            classReader.accept(visitor, ClassReader.SKIP_DEBUG);
            return (visitor.hasAnnotation(Authority.class.getName()) || visitor.hasMetaAnnotation(Authority.class.getName()));
        } catch (IOException e) {
            return false;
        }
    }

返回顶部
顶部