springmvc 自定义注解
1. 自定义一个注解
@Documented //文档生成时,该注解将被包含在javadoc中,可去掉
@Target(ElementType.METHOD)//目标是方法
@Retention(RetentionPolicy.RUNTIME) //注解会在class中存在,运行时可通过反射获取
@Inherited
public @interface AuthLoginAnnotation {
/**
* 检查是否已登录(注解的参数)
*
* @return true-检查;默认不检查为false
*/
boolean check() default false;
}
- 注解方法不能有参数。
- 注解方法的返回类型局限于原始类型,字符串,枚举,注解,或以上类型构成的数组。
- 注解方法可以包含默认值。
- 注解可以包含与其绑定的元注解,元注解为注解提供信息,有四种元注解类型:
1. @Documented – 表示使用该注解的元素应被javadoc或类似工具文档化,它应用于类型声明,类型声明的注解会影响客户端对注解元素的使用。如果一个类型声明添加了Documented注解,那么它的注解会成为被注解元素的公共API的一部分。
2. @Target – 表示支持注解的程序元素的种类,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。如果Target元注解不存在,那么该注解就可以使用在任何程序元素之上。
3. @Inherited – 表示一个注解类型会被自动继承,如果用户在类声明的时候查询注解类型,同时类声明中也没有这个类型的注解,那么注解类型会自动查询该类的父类,这个过程将会不停地重复,直到该类型的注解被找到为止,或是到达类结构的顶层(Object)。
4. @Retention – 表示注解类型保留时间的长短,它接收RetentionPolicy参数,可能的值有SOURCE(源文件中起作用), CLASS, 以及RUNTIME(保留到运行时起作用)。
2. 定义一个相应的拦截器,在springMVC配置文件中进行配置
拦截器:
spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器。
可以根据我们的需要重写preHandle(预处理)、postHandle后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、afterCompletion返回处理(已经渲染了页面)。
public class AuthLoginInteceptor extends HandlerInterceptorAdapter {
@Autowired
UserInfoService userInfoService ;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod methodHandler=(HandlerMethod) handler;
AuthCheckAnnotation auth=methodHandler.getMethodAnnotation(AuthCheckAnnotation.class);
//如果@AuthLoginAnnotation (check=false) 这里的auth为false,即不用进行拦截验证,@AuthCheckAnnotation默认为前面定义的true
if(auth!=null&&!auth.check()){
if(!isLogin(request)){
request.getRequestDispatcher("login.do").forward(request, response);
return false;
}
}
return true;
} }
3. 在springMVC.xml文件中添加拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*.do" />
<bean class="com.k.common.interceptor.AuthLoginInteceptor "/>
</mvc:interceptor>
</mvc:interceptors>
4. 在springMVC controller中使用实例
@AuthLoginAnnotation(check=true)
@RequestMapping("tomember.do")
@ResponseBody
public Object toMember(HttpServletRequest request,HttpServletResponse response){
.......
return Ret.toJson(responseBody);
}
参考一篇ImportNew中简单讲解JAVA注解的文章:http://www.importnew.com/14479.html
最新文章
- asp.net 自定义控件 嵌入资源文件 备忘
- 完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群
- P6 EPPM Manual Installation Guide (Oracle Database)
- 设计模式之——单例模式(Singleton)的常见应用场景
- 上传Test Result和attachment到ALM
- X431 元征诊断枪
- virtualBox使用nat模式下ssh连接
- c++多线程编程之互斥对象(锁)的使用之----死锁
- 首次启动优美新手指引tip
- Sql数据类型转换
- Django:之ORM、CMS和二维码生成
- HTML 5 服务器发送事件、Input 类型、表单元素、表单属性
- redis安装-单机版
- 2 安装redis.md
- 【Web开发】Mean web开发 01-Express实现MVC模式开发
- Mysql启动时执行文件init-file的使用
- Spring MVC 使用介绍(九)—— 异常处理
- 挑选队友 (生成函数 + FFT + 分治)
- python 奇偶拆分list,python拆分list,得到一个原来list的奇数list,一个原来list的偶数list
- 代码审计| HDWiki 漏洞(一)
热门文章
- 【转】Ant之build.xml详解
- MongoDB numa系列问题三:overcommit_memory和zone_reclaim_mode
- Maven 拾遗
- node.js 标准/错误输出 和 process.exit
- [pip]安装和管理python第三方包
- [转]URL汉字编码问题(及乱码解决)
- 移动端强大的富文本编辑器richeditor-android
- Android 百度鹰眼轨迹SDK(v2.1.6)
- 自己动手做——简易下载工具 SimpleDownloader
- ios中layoutsubview何时被调用