后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息。可以把获取在shiro中的登陆者信息封装在一个类中,使用时获取。本文主要讲述如何使用注解将值注入参数,shiro的配置请自行百度。

定义注解

新建一个InfoAnnotation.java的注解类,用于注解参数,代码如下:

@Target(ElementType.PARAMETER)

@Retention(RetentionPolicy.RUNTIME)

public @interface InfoAnnotation {

String value() default "userId";//默认获取userId的值

}

定义注解处理类

新建一个InfoResolver类,AOP无法将值注入参数,需要继承HandlerMethodArgumentResolver类,代码如下:

public class InfoResolver implements HandlerMethodArgumentResolver {

//使用自定义的注解

@Override

public boolean supportsParameter(MethodParameter methodParameter) {

return methodParameter.hasParameterAnnotation(InfoAnnotation.class);

}

//将值注入参数

@Override

public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {

//获取捕获到的注解

InfoAnnotation annotation = methodParameter.getParameterAnnotation(InfoAnnotation.class);

String value = annotation.value();

//获取需要注入值得逻辑

//该例子在shiro中获取userId或者用户信息

if (value == null || "".equalsIgnoreCase(value) || value.equalsIgnoreCase("userId")){

User user = (User)SecurityUtils.getSubject().getSession().getAttribute("user");

if (user == null){

return 1;

}

return user.getId();

} else if ("user".equalsIgnoreCase(value)){

return SecurityUtils.getSubject().getSession().getAttribute("user");

}

return value;

}

}

使springboot支持该拦截器

修改启动类,继承WebMvcConfigurationSupport类,添加自定义得拦截器,代码如下:

@SpringBootApplication

public class DemoApplication extends WebMvcConfigurationSupport {

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

//添加自定义的拦截器

@Override

public void addArgumentResolvers(List argumentResolvers){

super.addArgumentResolvers(argumentResolvers);

argumentResolvers.add(new InfoResolver());

}

}

测试

测试用例,如下代码

@GetMapping

public BaseResponse> test(@InfoAnnotation int userId){

return ResponseUtil.successResponse(userId);

}

登陆返回的信息

调用测试用例返回的信息

可以看到登陆返回的用户信息的id和测试用例返回的data一致。

以上这篇在springboot中使用注解将值注入参数的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

java参数值注入_在springboot中使用注解将值注入参数的操作相关推荐

  1. java懒加载注解_在springboot中实现个别bean懒加载的操作

    懒加载---就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中. @Lazy 在需要懒加载的bean上加上@Lazy ...

  2. java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  3. springboot 事务嵌套问题_在springboot中写单元测试解决依赖注入和执行后事务回滚问题...

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  4. python中布尔型的值_在python中对于bool布尔值的取反操作

    背景 根据公司业务的需求,需要做一个对于mysql数据库的大批量更新.脚本嘛也是干干单单.使用了redis的队列做缓存,可以异步并发的多任务进行更新. 有点难受的地方在于,请求访问时,因为一些网速,速 ...

  5. python取反操作_在python中对于bool布尔值的取反操作

    背景 根据公司业务的需求,需要做一个对于mysql数据库的大批量更新.脚本嘛也是干干单单.使用了redis的队列做缓存,可以异步并发的多任务进行更新. 有点难受的地方在于,请求访问时,因为一些网速,速 ...

  6. SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍

    SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍 本篇博文将介绍几种如何处理url中的参数的注解@PathVaribale/@Requ ...

  7. java 防止js注入_在WebView中如何让JS与Java安全地互相调用

    在现在安卓应用原生开发中,为了追求开发的效率以及移植的便利性,使用WebView作为业务内容展示与交互的主要载体是个不错的折中方案.那么在 这种Hybrid(混合式) App中,难免就会遇到页面JS需 ...

  8. @transaction使自定义注解失效_【完美】SpringBoot中使用注解来实现 Redis 分布式锁...

    一.业务背景 有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响. 二.分析流程 使用 Redis 作为分布式锁,将锁的状态放到 Red ...

  9. java idle 机制_深入springboot原理——一步步分析springboot启动机制(starter机制)...

    前言 使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程.本文的目的就是一步步分析springboot的启动过程 ...

最新文章

  1. AI设计师“鲁班”进化史:每秒制作8000张双11海报,没一张雷同!
  2. c++17(18)-static_cast
  3. javaweb家居用品线上销售系统_智能家居订单管理系统方案设计路线
  4. node.js 安装使用http-server
  5. LwIP之网络接口管理
  6. Web API 设计摘要
  7. 域名,端口,IP总结
  8. linux触摸屏代码解析,Linux触摸屏驱动解析
  9. 《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
  10. 卸载不了mysql2008_卸载SQL2008遇到的问题及解决办法
  11. rainyday.js 下雨效果插件使用方法
  12. excel计算机课程表,Excel如何制作课程表
  13. 继电器驱动电路(各种单片机、CD4013触发器驱动电路图)
  14. 集成Euraka的SpringBoot工程禁止输出日志:ConfigClusterResolver : Resolving eureka endpoints via configuration的方法
  15. C - Recursive sequence (矩阵ksm)
  16. python抓取网站88titienmae88中的“图片区”的第一页的所有图片
  17. Fraud Busters
  18. 中儒集团董事长朱宝先生一行到访亚信总部!
  19. 求面积 (坐标叉积公式+凹多边形面积-坐标公式)
  20. 刘芳计算机学院,刘芳,女,1983年生,天津工业大学计算机与软件学院讲师.PDF

热门文章

  1. idea--Project Structure
  2. 幅度调制(AM调制、DSB(双边带)调制、SSB、VSB)
  3. 前端基础6:背景常用属性和定位以及BFC
  4. js使用base64 上传图片解决iOS手机竖屏拍摄图片发生旋转问题
  5. apktool 在mac下的使用 -反编译安卓apk文件
  6. Android Studio 视图解析
  7. CI框架 -- URL
  8. JavaScript实现的List(集合)类
  9. python自动化上传图片_Python(二)借助七牛云通过脚本自动获取上传图片外链
  10. 悲观锁和乐观锁_浅谈数据库悲观锁和乐观锁