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

最新文章

  1. asp.net 自定义控件 嵌入资源文件 备忘
  2. 完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群
  3. P6 EPPM Manual Installation Guide (Oracle Database)
  4. 设计模式之——单例模式(Singleton)的常见应用场景
  5. 上传Test Result和attachment到ALM
  6. X431 元征诊断枪
  7. virtualBox使用nat模式下ssh连接
  8. c++多线程编程之互斥对象(锁)的使用之----死锁
  9. 首次启动优美新手指引tip
  10. Sql数据类型转换
  11. Django:之ORM、CMS和二维码生成
  12. HTML 5 服务器发送事件、Input 类型、表单元素、表单属性
  13. redis安装-单机版
  14. 2 安装redis.md
  15. 【Web开发】Mean web开发 01-Express实现MVC模式开发
  16. Mysql启动时执行文件init-file的使用
  17. Spring MVC 使用介绍(九)—— 异常处理
  18. 挑选队友 (生成函数 + FFT + 分治)
  19. python 奇偶拆分list,python拆分list,得到一个原来list的奇数list,一个原来list的偶数list
  20. 代码审计| HDWiki 漏洞(一)

热门文章

  1. 【转】Ant之build.xml详解
  2. MongoDB numa系列问题三:overcommit_memory和zone_reclaim_mode
  3. Maven 拾遗
  4. node.js 标准/错误输出 和 process.exit
  5. [pip]安装和管理python第三方包
  6. [转]URL汉字编码问题(及乱码解决)
  7. 移动端强大的富文本编辑器richeditor-android
  8. Android 百度鹰眼轨迹SDK(v2.1.6)
  9. 自己动手做——简易下载工具 SimpleDownloader
  10. ios中layoutsubview何时被调用