短信架构

类关系图

sms

说明
  1. SmsUtil 短信通用接口,包含短信发送,短信认证,批量发送功能
  2. AliSmsUtil 阿里短信额外实现,阿里短信包含在线模版操作,签名操作等等的功能
  3. SmsUtilAliImplService 短信服务阿里的具体实现,实现上述 1、2 中的接口,完善了短信功能
  4. SmsController 通用控制器,用于短信发送

架构思路

  1. 抽象短信的能力到SmsUtil中,得到第一个接口类。系统默认集成阿里短信,所以对阿里短信的接口能力进行抽象的到第二个接口类 AliSmsUtil。

  2. 实现短信功能,实现短信基础功能,以及阿里的在线签名管理,模版的复杂操作,最终实现 SmsUtilAliImplService。

  3. 控制器端,拥有流量过滤,同一用户1分钟只能发送一个短信请求,

    @LimitPoint(name = "sms_send", key = "sms")
    
  4. 其他模块调用短信认证模块,传递手机号、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即可,如果需要实现其他短信接口的在线模版等等的能力,按照阿里短信这套逻辑直接服用即可。

results matching ""

    No results matching ""