SpringBoot实现自定义注解与控制器参数注入

前言

有这样一个场景,在某个控制器中的参数中,需要从Request的Header中取到Authorization请求头,其中Authorization是Jwt的身份Token,我们需要取到Token中的uid字段,以用来判断当前的用户身份,在没有使用任何的权限身份管理框架的前提下,那么我们只能在Controller层进行一步步的调取,如果是有多个控制器的话,这样会增加很多的冗余代码,于是我们可以考虑使用自定义注解来实现类似于SpringBoot的参数注入。
SpringBoot实现自定义注解与控制器参数注入

正文

首先,我们需要定义一个自定义注解,命名为JwtToken

接下来我们需要一个解析器,其实在SpringBoot中已经为我们提供了相关的处理解析器-HandlerMethodArgumentResolver,我们只需要实现接口完成业务逻辑处理即可。

supportsParameter

supportsParameter接口是用于判断是否需要对该参数进行解析,如果该接口的返回值为true,则会继续执行resolveArgument接口方法,所以我们这里应为:

resolveArgument

resolveArgument接口是处理参数的分解,只有supportsParameter为true时才会调用此方法:

其中我的JwtUtil中取Token中的信息的方法为:

然后将我们写好的Resolver注入到SpringMVC的ArgumentResolvers中,如:

到这一步我们的所有步骤就已经完成了,于是我们可以给需要取值的参数加上@JwtToken即可,例如:

总结

在Spring中为我们提供了许多方便的接口,可以简单易化实现我们的功能,例如我前段时间做的encrypt-body-spring-boot-starter就基于其RequestBodyAdviceResponseBodyAdvice接口来进行实现响应与请求参数的加解密,与之对应,这篇文章也能够体现出Spring这样的设计的好处。

未来无限可能,请大家尽情探索吧!

    A+
所属分类:Java

发表评论

请在下方填写评论信息

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

表情 粗体 斜体 图片 引用 链接 删除线 下划线 插代码 签到

目前评论:12   其中:访客  6   博主  6

  1. avatar 宏远博客 0  来自天朝的朋友 谷歌浏览器 Windows 10 湖南省长沙市 联通

    不错哦

  2. avatar v2er-澳洲农场主 0  来自天朝的朋友 谷歌浏览器 Windows 7 上海市 电信

    你这个自定义的Resolver不需要注册到spring吗,配置类中类似addArgumentResolvers这样的操作,不然怎么生效的?

  3. avatar 男装品牌 1  来自天朝的朋友 谷歌浏览器 Windows 7 广西贺州市 联通

    文章不错非常喜欢

  4. avatar 沙缸过滤器 0  来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市 电信

    学程序好烦

  5. avatar 广州网站建设 4  来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市 电信

    写的不错

  6. avatar 子午书屋 2  来自天朝的朋友 火狐浏览器 Windows 7 北京市 联通

    这是微服务那一套吧