一、简介

上篇文章主要介绍了注解的概念以及怎么自定义一些注解,本文将通过SpringBoot中实现获取当前登录用户的自定义注解示例,进一步熟悉自定义注解的实际应用场景。

二、实现思路

【a】定义用户实体类User:

public class User implements Serializable {private String loginId;private String name;public User(String loginId, String name) {this.loginId = loginId;this.name = name;}public String getLoginId() {return loginId;}public void setLoginId(String loginId) {this.loginId = loginId;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

【b】自定义注解CurrentLoginUser:

/*** @Description: 当前登录用户自定义注解* @Auther: weishihuai* @Date: 2018/12/19 10:32* 说明: 在web端controller接口中,可以通过注入该注解,获取到当前登录的用户信息*/@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrentLoginUser {String value() default "";
}

【c】自定义参数解析器:

/*** @Description: @CurrentLoginUser注解解析器* @Auther: weishihuai* @Date: 2018/12/19 10:36* 说明: 自定义参数解析器*/
public class CurrentLoginUserMethodArgumentResolver implements HandlerMethodArgumentResolver {public CurrentLoginUserMethodArgumentResolver() {}/*** 用于判定是否需要处理该参数分解,返回true为需要,并会去调用下面的方法resolveArgument.** @param methodParameter 方法参数* @return*/@Overridepublic boolean supportsParameter(MethodParameter methodParameter) {//如果方法参数上面有@CurrentLoginUser注解,返回true,并且执行下面的resolveArgument()解析参数的方法,如果不存在该注解返回false,不会执行resolveArgument()方法return methodParameter.hasParameterAnnotation(CurrentLoginUser.class);}/*** 真正用于处理参数分解的方法,返回的Object就是controller方法上的形参对象.** @param methodParameter       方法参数* @param modelAndViewContainer* @param nativeWebRequest* @param webDataBinderFactory* @return 自定义注解参数的值* @throws Exception*/@Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
//        获取当前登录的用户信息(可以同时返回登录用户所有的权限或者角色信息)
//        Object principal = SecurityUtils.getSubject().getPrincipal();
//        if (null != principal  && principal instanceof RbacUserInfoProtocol){
//            return principal;
//        }//获取当前登录用户的逻辑处理//这里只是模拟简单的返回当前登录用户return new User("admin", "zhangsan");}
}

【d】 配置自定义参数解析器

/*** @Description: 配置自定义参数解析器* @Auther: weishihuai* @Date: 2018/12/19 10:52*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {@Beanpublic CurrentLoginUserMethodArgumentResolver currentLoginUserMethodArgumentResolver() {return new CurrentLoginUserMethodArgumentResolver();}@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {//添加@CurrentLoginUser方法注解的解析处理argumentResolvers.add(currentLoginUserMethodArgumentResolver());super.addArgumentResolvers(argumentResolvers);}
}

【e】测试

@RequestMapping("/testLoginUser")public void testLoginUser(@CurrentLoginUser User user) {System.out.println("TestController.testLoginUser-->loginId-->" + user.getLoginId() + "-->name-->" + user.getName());}

启动项目:

如图,可以看到,当前登录用户的值都注入到@CurrentLoginUser注解中了,可以在Controller中注解拿出当前登录用户的信息,避免频繁调用获取当前用户信息的方法,比较简便。

三、总结

以上就是关于在SpringBoot中使用自定义注解获取当前登录用户的示例,仅供大家学习参考,希望对大家的学习有所帮助。

Java 注解Annotation总结二相关推荐

  1. Java 注解(Annotation)使用方法归纳

    Java注解Annotation使用方法归纳 简介 注解是从JDK5开始支持,是Java对元数据的一种特殊支持.与注释有一定区别,可以理解为代码上的特殊标记,通过这些标记我们可以在编译,类加载,运行等 ...

  2. Java注解(Annotation)详解

    转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotati ...

  3. Java注解Annotation 完成验证

    Java注解Annotation用起来很方便,也越来越流行,由于其简单.简练且易于使用等特点,很多开发工具都提供了注解功能,不好的地方就是代码入侵比较严重,所以使用的时候要有一定的选择性. 这篇文章将 ...

  4. java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制.Java 语言中的类.方法.变量.参数和包等都可以被标注.注解可以看作是一种特殊的标记,在程序在编译或 ...

  5. java 注解: Annotation

    java 注解: Annotation 普通注解 自定义注解 元注解 注解: 位于源码中,用来修饰程序的元素,但不会对被修饰的对象有直接的影响. 可增加程序的动态性. 普通注解 普通注解:为java代 ...

  6. Java注解annotation invalid type of annotation member

    文章目录 Java注解annotation : invalid type of annotation member 1.什么是invalid type of annotation member 2.哪 ...

  7. 深入JAVA注解(Annotation):自定义注解

    一.基础知识:元注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解 ...

  8. Java注解Annotation的用法 - 自定义Annotation实现

    Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据. Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标 ...

  9. 深入理解Java注解Annotation之注解处理器

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

  10. 深入理解Java注解Annotation及自定义注解

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

最新文章

  1. 【Java】排序算法 之 【快速排序】 总结
  2. spring InitializingBean接口分析
  3. [备忘][转载]apache 403错误 You don't have permission to access on this server
  4. UILable的text设置中划线(删除线)
  5. struts2 的form 标签theme属性
  6. ransac剔除误匹配matlab代码,基于APAP图像拼接算法的改进
  7. 基于mcat开发以太坊智能合约
  8. ITK:多相Chan和Vese稀疏场水平集分割
  9. 作家百态之二:山南海北
  10. mysql瓶颈分析_网站瓶颈分析—MYSQL性能分析
  11. 解决不产生nohup.out文件方法
  12. 【Java】关于Java的一些基础知识点
  13. DG Lecture 2 part 1: points, vectors, directional derivative
  14. 2018--Linux面试题
  15. MyBatis---动态SQL
  16. 接口自动化测试框架搭建(9、自动化测试case的编写)--python+HTMLTestRunnerCN+request+unittest+mock+db
  17. CentOS 5.11下Oracle 11G R2 Dataguard搭建
  18. MATLAB —— 散点图绘制
  19. java调用萤石对讲_海康萤石摄像头SDK Java(一)java本地调用摄像头
  20. 国家语言代码大全【方便翻译查询】

热门文章

  1. Spark中的python shell交互界面Ipython和jupyter notebook
  2. 容器技术Docker K8s 27 容器服务ACK基础与进阶-监控管理
  3. centos6配置mysql5.7_CentOS 6.7 下 MYSQL 5.7 的安装与配置
  4. python正则表达式提取c语言中的函数,Python正则表达式匹配C语言函数
  5. Kaggle酒推荐,winemag-data-130k-v2.csv
  6. 146.LRU缓存机制
  7. 8. 字符串转整数 (atoi)
  8. 什么是document对象?如何获取文档对象上的元素?_JavaScript DOM操作元素的方法,你还记得多少?...
  9. 麻省理工线性代数第二讲
  10. 现代通信原理A.3:随机信号的功率谱估计