短信服务在项目中的配置及如何实现验证码登录

简介: 短信服务在项目中的配置及如何实现验证码登录

短信发送

短信服务介绍

目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,我们只需要注册成为会员并且按照提供的开发文档进行调用就可以发送短信。需要说明的是,这些短信服务一般都是收费服务。

阿里云短信服务

阿里云短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。
应用场景:验证码 短信通知 推广新闻

第一步:设置短信签名

短信签名是短信发送者的署名,表示发送方的身份


第二步:切换到模板管理

短信模板包含信息发送内容、场景、变量信息


上述的操作均需要人工审核通过的
第三步:设置AccessKey

当你程序要访问阿里云的短信服务的时候是需要用此密码来进行验证的



第四步:创建用户


第五步:设置权限


那么经历过上述操作我们的授权操作就成功了,但注意的是当我们的AccessKey被泄露出去之后,别人就可以那我们的AccessKey来发送短信并且扣的钱还是我们的钱,所以我们此时就要收回key,这个key就作废了


验证码示例代码

导入依赖

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.5.16</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
  <version>2.1.0</version>
</dependency>

准备工作
第一步:创建实体类

/**
 * 用户信息
 */
@Data
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    //姓名
    private String name;
    //手机号
    private String phone;
    //性别 0 女 1 男
    private String sex;
    //身份证号
    private String idNumber;
    //头像
    private String avatar;
    //状态 0:禁用,1:正常
    private Integer status;
}

第二步:创建mapper

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

第三步:创建Service

public interface UserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

第四步:创建Controller

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    @Autowired
    private UserService userService;
}

第五步:导入短息发送工具类和生成验证码工具类

/**
 * 短信发送工具类
 */
public class SMSUtils {
    /**
    * 发送短信
    * @param signName 签名
    * @param templateCode 模板
    * @param phoneNumbers 手机号
    * @param param 参数
    */
    public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");
        IAcsClient client = new DefaultAcsClient(profile);
        SendSmsRequest request = new SendSmsRequest();
        request.setSysRegionId("cn-hangzhou");
        request.setPhoneNumbers(phoneNumbers);
        request.setSignName(signName);
        request.setTemplateCode(templateCode);
        request.setTemplateParam("{\"code\":\""+param+"\"}");
        try {
            SendSmsResponse response = client.getAcsResponse(request);
            System.out.println("短信发送成功");
        }catch (ClientException e) {
            e.printStackTrace();
        }
    }
}
/**
 * 随机生成验证码工具类
 */
public class ValidateCodeUtils {
    /**
     * 随机生成验证码
     * @param length 长度为4位或者6位
     * @return
     */
    public static Integer generateValidateCode(int length){
        Integer code =null;
        if(length == 4){
            code = new Random().nextInt(9999);//生成随机数,最大为9999
            if(code < 1000){
                code = code + 1000;//保证随机数为4位数字
            }
        }else if(length == 6){
            code = new Random().nextInt(999999);//生成随机数,最大为999999
            if(code < 100000){
                code = code + 100000;//保证随机数为6位数字
            }
        }else{
            throw new RuntimeException("只能生成4位或6位数字验证码");
        }
        return code;
    }
    /**
     * 随机生成指定长度字符串验证码
     * @param length 长度
     * @return
     */
    public static String generateValidateCode4String(int length){
        Random rdm = new Random();
        String hash1 = Integer.toHexString(rdm.nextInt());
        String capstr = hash1.substring(0, length);
        return capstr;
    }
}

开始配置
第一步:修改过滤器



第二步:编写Controller文件

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    @Autowired
    private UserService userService;
    //发送手机短信验证码
    @PostMapping("/sendMsg")
    public R<String> sendMsg(@RequestBody User user, HttpSession session){
        //获取手机号
        String phone = user.getPhone();
        if(StringUtils.isNotEmpty(phone)){
            //生成随机的四位验证码
            String code = ValidateCodeUtils.generateValidateCode(4).toString();
            log.info("code={}",code);
            //调用阿里云提供的短信服务API完成发送短信
            //SMSUtils.sendMessage("瑞吉外卖","",phone,code);
            //需要将生成的验证码保存到session
            session.setAttribute(phone,code);
            return R.success("手机验证码发送成功");
        }
        return R.error("短信发送失败");
    }
    @PostMapping("/login")
    public R<User> login(@RequestBody Map map,HttpSession session){
        //获取手机号
        String phone = map.get("phone").toString();
        //获取验证码
        String code = map.get("code").toString();
        //从Session中获取保存的验证码
        Object codeInSession = session.getAttribute(phone);
        //进行验证码的比对
        if(codeInSession!=null && codeInSession.equals(code)){
            //如果能够比对成功,说明登录成功
            LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(User::getPhone,phone);
            User user = userService.getOne(queryWrapper);
            if(user==null){
                //判断当前手机号对应的用户是否是新用户,如果是新用户完成自动注册
                user = new User();
                user.setPhone(phone);
                user.setStatus(1);
                userService.save(user);
            }
            session.setAttribute("user",user.getId());
            return R.success(user);
        }
        return R.error("短信发送失败");
    }
}
目录
相关文章
|
6月前
|
JavaScript 前端开发
如何使用阿里云短信服务实现登录页面,手机验证码登录?2
如何使用阿里云短信服务实现登录页面,手机验证码登录?
149 0
|
6月前
|
SQL Java
如何使用阿里云短信服务实现登录页面,手机验证码登录?1
如何使用阿里云短信服务实现登录页面,手机验证码登录?
187 0
|
7月前
|
监控 Java API
Spring boot项目集成阿里云短信服务发送短信验证码
Spring boot项目集成阿里云短信服务发送短信验证码
412 0
|
7月前
|
监控 安全
阿里云 短信服务——开启验证码防盗刷监控
阿里云 短信服务——开启验证码防盗刷监控
197 0
|
7月前
阿里云短信服务价格_企业短信营销推广_验证码通知-阿里云
阿里云短信服务价格_企业短信营销推广_验证码通知-阿里云,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条
80 0
|
前端开发 JavaScript 应用服务中间件
谷粒学院(十五)JWT | 阿里云短信服务 | 登录与注册前后端实现(二)
谷粒学院(十五)JWT | 阿里云短信服务 | 登录与注册前后端实现(二)
谷粒学院(十五)JWT | 阿里云短信服务 | 登录与注册前后端实现(二)
|
存储 JSON 算法
谷粒学院(十五)JWT | 阿里云短信服务 | 登录与注册前后端实现(一)
谷粒学院(十五)JWT | 阿里云短信服务 | 登录与注册前后端实现(一)
谷粒学院(十五)JWT | 阿里云短信服务 | 登录与注册前后端实现(一)
|
NoSQL Java 测试技术
微服务项目:尚融宝(19)(后端搭建:阿里云短信服务整合)
微服务项目:尚融宝(19)(后端搭建:阿里云短信服务整合)
微服务项目:尚融宝(19)(后端搭建:阿里云短信服务整合)
|
前端开发 Java Spring
spring boot中如何实现在手机注册和登录时获取验证码(阿里短信服务)
为了实现在手机注册和登录时获取手机验证码,我使用了阿里的短信服务,下面就来介绍一下具体如何实现。将介绍代码层面如何使用的,去阿里开通该服务,以及如何获得你的accessKeyId和accessKeySecret等。
805 0
spring boot中如何实现在手机注册和登录时获取验证码(阿里短信服务)
|
16天前
|
云安全 安全 API
阿里云——OpenAPI使用——短信服务
阿里云——OpenAPI使用——短信服务
44 0