短信架构
类关系图
说明
- SmsUtil 短信通用接口,包含短信发送,短信认证,批量发送功能
- AliSmsUtil 阿里短信额外实现,阿里短信包含在线模版操作,签名操作等等的功能
- SmsUtilAliImplService 短信服务阿里的具体实现,实现上述 1、2 中的接口,完善了短信功能
- SmsController 通用控制器,用于短信发送
架构思路
抽象短信的能力到SmsUtil中,得到第一个接口类。系统默认集成阿里短信,所以对阿里短信的接口能力进行抽象的到第二个接口类 AliSmsUtil。
实现短信功能,实现短信基础功能,以及阿里的在线签名管理,模版的复杂操作,最终实现 SmsUtilAliImplService。
控制器端,拥有流量过滤,同一用户1分钟只能发送一个短信请求,
@LimitPoint(name = "sms_send", key = "sms")
其他模块调用短信认证模块,传递手机号、uuid、注册场景、验证码 即可验证。如:注册用户
@ApiOperation(value = "注册用户") @ApiImplicitParams({ @ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "query"), @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "query"), @ApiImplicitParam(name = "mobilePhone", value = "手机号", required = true, paramType = "query"), @ApiImplicitParam(name = "code", value = "验证码", required = true, paramType = "query") }) @PostMapping("/register") public ResultMessage<Object> register(@NotNull(message = "用户名不能为空") @RequestParam String username, @NotNull(message = "密码不能为空") @RequestParam String password, @NotNull(message = "手机号为空") @RequestParam String mobilePhone, @RequestHeader String uuid, @NotNull(message = "验证码不能为空") @RequestParam String code) { boolean result = smsUtil.verifyCode(mobilePhone, VerificationEnums.REGISTER, uuid, code); if (result) { return ResultUtil.data(memberService.register(username, password, mobilePhone)); } else { return ResultUtil.error(ResultCode.VERIFICATION_SMS_ERROR); } }
如果需要对接其他短信接口,实现基础接口SmsUtil即可,如果需要实现其他短信接口的在线模版等等的能力,按照阿里短信这套逻辑直接服用即可。