使用springmvc拦截器+自定义注解做权限管理

1、自定义注解:
这里写图片描述
如图:@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)

还有两个元注解:@Documented:用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Inherited :是一个标记注解,阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

default是注解元素authority的默认值,若不指定authority的值,则authority为”“。

2、这里写图片描述
关于springmvc拦截器的具体实现原理等,我就不赘述了,我写的代码也通俗易懂,大家看看就明白了。
在这里可以获取请求参数的具体信息,我是根据request获取到用户的编号,去数据库查询用户的所有权限,然后通过
HandlerMethod method = (HandlerMethod) handler;
AuthorityAnnotation auth = method.getMethod().getAnnotation(AuthorityAnnotation.class);
获取方法上的自定义注解的值,再通过PrintWriter返回json格式的消息内容。

当然,springmvc的拦截器要在springmvc的配置文件中配置<mvc:interceptors>标签,如下图,大家看注释即可:
这里写图片描述

下面是一部分代码的运行效果,我目前是模拟用户只有admin权限,没有从数据库查询,不过和从数据库中查询没什么区别。
这里写图片描述
如上图,queryAll方法需要user权限才能访问,queryByIdAndId方法需要admin权限才能访问。
返回如下结果:
这里写图片描述
这里写图片描述

关于自定义注解的一些定义和元注解的解释,参考了http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html的文章,感谢作者,如有侵权,请告知我,谢谢!

如代码或逻辑有不足之处,麻烦请指点,非常感谢!

猜你喜欢

转载自blog.csdn.net/konghen12/article/details/53337456