「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」。
背景
事情是这样的,目前我正在参与 XXXX 项目的搭建,需要与第三方对接接口。在对方的接口中存在几个异步通知,为了接口的安全性,需要对接口的参数进行验签处理。
为了方便大家对异步通知返回参数的处理,Z 同事提出要将该验签功能进行统一封装,到时候大家只需要关注自己的业务逻辑即可。
Z同事的解决方案
Z 同事选择的是“自定义参数解析器”的解决方案,接下来我们通过代码来了解一下。
自定义注解
在自定义注解中定义一个方法:是否启用验签功能,默认验签。
1 | java复制代码@Documented |
自定义方法参数解析器
创建自定义方法参数解析器 RsaVerifyArgumentResolver 实现 HandlerMethodArgumentResolver 接口,并实现里边的方法。
- supportsParameter:此方法用来判断本次请求的接口是否需要解析参数,如果需要返回 true,然后调用下面的 resolveArgument 方法,如果不需要返回 false。
- resolveArgument:真正的解析方法,将请求中的参数值解析为某种对象。
- parameter 要解析的方法参数
- mavContainer 当前请求的 ModelAndViewContainer(为请求提供对模型的访问)
- webRequest 当前请求
- WebDataBinderFactory 用于创建 WebDataBinder 的工厂
1 | java复制代码@AllArgsConstructor |
创建配置类
创建配置类 PayTenantWebConfig 实现 WebMvcConfigurer 接口,将自定义的方法参数解析器加入到配置类中。
1 | java复制代码@Configuration |
这样我们就完成了自定义参数解析器解决方案的基础搭建,至于该怎么来使用它,我们将在下一节中进行讲解。如果你有不同的意见或者更好的idea
,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!
本文转载自: 掘金