博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC自定义注解实现用户行为验证
阅读量:6271 次
发布时间:2019-06-22

本文共 3390 字,大约阅读时间需要 11 分钟。

最近在进行项目开发的时候需要对接口做Session验证

@Retention:注解的保留位置                   @Retention(RetentionPolicy.SOURCE)    //注解仅存在于源码中,在class字节码文件中不包含         @Retention(RetentionPolicy.CLASS)     //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,         @Retention(RetentionPolicy.RUNTIME)   //注解会在class字节码文件中存在,在运行时可以通过反射获取到             @Target:注解的作用目标                    @Target(ElementType.TYPE)   //接口、类、枚举、注解        @Target(ElementType.FIELD) //字段、枚举的常量        @Target(ElementType.METHOD) //方法        @Target(ElementType.PARAMETER) //方法参数        @Target(ElementType.CONSTRUCTOR)  //构造函数        @Target(ElementType.LOCAL_VARIABLE)//局部变量        @Target(ElementType.ANNOTATION_TYPE)//注解        @Target(ElementType.PACKAGE) ///包                @Document:说明该注解将被包含在javadoc中            @Inherited:说明子类可以继承父类中的该注解

 

1、自定义一个注解@AuthCheckAnnotation

@Documented //文档生成时,该注解将被包含在javadoc中,可去掉@Target(ElementType.METHOD)//目标是方法 @Retention(RetentionPolicy.RUNTIME) //注解会在class中存在,运行时可通过反射获取  @Inheritedpublic @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、afterCompletio方法。

  分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面)     在preHandle中,可以进行编码、安全控制等处理;     在postHandle中,有机会修改ModelAndView;     在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。

public class AuthCheckInteceptor 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);     //如果方法中添加了@AuthCheckAnnotation 这里的auth不为null     //如果@AuthCheckAnnotation(check=false) 这里的auth为false,即不用进行拦截验证,@AuthCheckAnnotation默认为前面定义的true          if(auth!=null&&!auth.check()){           return true;          }        UserInfo user=(UserInfo)request.getSession().getAttribute(Constants.SESSION_USER);        try {            userInfoService.login(request, user);            return true;        } catch (Exception e) {            request.getRequestDispatcher("login.do").forward(request, response);            return false;        }    }}

在springMVC.xml文件中添加拦截器

3、在springMVC controller中使用实例

@AuthCheckAnnotation(check=true)    @RequestMapping("doLogin")    @ResponseBody    public Object doLogin(HttpServletRequest request,HttpServletResponse response){        .......        return RetMessage.toJson(responseBody);    }

 

转载地址:http://bblpa.baihongyu.com/

你可能感兴趣的文章
Java 正则表达式详细使用
查看>>
【ADO.NET】SqlBulkCopy批量添加DataTable
查看>>
SqlServer--bat批处理执行sql语句1-osql
查看>>
Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令
查看>>
laravel安装初体验
查看>>
用yum查询想安装的软件
查看>>
TIJ -- 吐司BlockingQueue
查看>>
数据库分页查询
查看>>
[编程] C语言枚举类型(Enum)
查看>>
[Javascript] Compose multiple functions for new behavior in JavaScript
查看>>
ASP.NET MVC性能优化(实际项目中)
查看>>
ES6里关于类的拓展(一)
查看>>
零元学Expression Blend 4 - Chapter 46 三分钟快速充电-设定Margin的小撇步
查看>>
Format Conditions按条件显示表格记录
查看>>
RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示
查看>>
mysql优化----explain的列分析
查看>>
Python正则表达式
查看>>
Java中CAS详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
命令行man的帮助手册
查看>>