发送短信验证码

用户注册时一般采用短信验证码注册,登录也是一样,那么短信验证码是怎么发送的呢

短信验证码肯定是国内运营商发送的,但是个人或者小公司想要直接和运营商对接不太现实,所以我们可以使用第三方提供的短信发送服务

使用阿里云提供的短信服务:

前置操作:注册阿里云账号,登录账号

1:进入短信服务模块,申请签名

2:申请模板,需要关联签名

3:创建AccessKey

4:根据需求选择API

5:复制到工具类,导入依赖坐标,修改参数

6.封装成工具类


public class SendSms {
    private static String AccessKeyID = "xxxx"; //输入第三步获取的AccessKey
    private static String AccessKeySecret = "xxxx"; //输入secret


    public static void send(String phoneNumbers, String templateParam) {
        // HttpClient Configuration
        

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(AccessKeyID)
                .accessKeySecret(AccessKeySecret)
                //.securityToken("<your-token>") // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-qingdao") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("dysmsapi.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
                .signName("XXXX")
                .templateCode("XXXX")
                .phoneNumbers(phoneNumbers)
                .templateParam("{\"code\":\"" + templateParam + "\"}")
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);
        // Synchronously get the return value of the API request
        SendSmsResponse resp = null;
        try {
            resp = response.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
       

        // Finally, close the client
        client.close();
    }

}

7.业务层调用工具类

 /*
     * 用户登录获取验证码
     * */
    @RequestMapping(value = "/userLogin.action")
    @ResponseBody
    public String toUserLoginUI(String tel, HttpServletRequest request) {
        Random random = new Random();
        String templateParam = (int) (random.nextDouble() * 9000 + 1000) + "";
        System.out.println(templateParam);
        //SendSms.send(tel,templateParam); //调用工具类发送验证码

        //将验证码和手机号添加到域对象
        request.getSession().setAttribute(tel, templateParam);
        request.getSession().setMaxInactiveInterval(60*5);

        return "200";
    }

这样用户就可以收到短信了,接下来的操作就是把用户输入的验证码和手机号与session域数据校验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值