使用springboot+security+Aliyun短信服务实现注册登录

为了实现个人博客部分的登录注册,我采用了阿里云短信服务发送验证码,后端比对验证码的方式完成注册,现在功能还不完全,以后这个功能可以用于修改密码等需要验证用户身份的地方。

  1. 阿里云短信服务

    开通短信服务
    点击进入阿里云官网

  2. 进入控制台 左侧选择产品与服务,搜索短信

  3. 选择国内签名,创建自己的签名和模板 一般审核一两个小时就好了

  4. 点击自己头像,选择accesskeys,注册生成自己的accesskey

    acceId和accesskey不要上传到github码云等开源社区!!!

  5. 调用阿里云短信服务

pom文件

        <!--阿里云短信服务--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.0.6</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.1.0</version></dependency>

发送短信Util

/*** 阿里云短信服务** @author hobo*/
@Slf4j
public class AliyunSmsUtils {private static final String PRODUCT = "Dysmsapi";private static final String DOMAIN = "dysmsapi.aliyuncs.com";private static final String ACCESS_KEY_ID = "YOUR KEY ID";private static final String ACCESS_KEY_SECRET = "YOUR KEY SECRET";public static boolean sendInsertUserMsg(String telephone, String code,String templateCode) throws ClientException {//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号request.setPhoneNumbers(telephone);//必填:短信签名-可在短信控制台中找到request.setSignName("hobo");//必填:短信模板-可在短信控制台中找到request.setTemplateCode(templateCode);request.setTemplateParam("{\"code\":\"" + code + "\"}");SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {log.info("短信发送成功");return true;} else {log.error("短信发送失败");}return false;}/*** 创建四位数验证码* @return java.lang.String*/public static String setCode() {int code = (int) ((Math.random() * 9999) + 100);return code + "";}}

LoginController

@RestController
@RequestMapping("/anon")
@Api(tags = "登录注册")
public class LoginController {@Autowiredprivate UserService userService;@PostMapping(name = "用户注册", value = "/insert")public Object insert(UserInsertForm userInsertForm){return userService.insertUser(userInsertForm);}@PostMapping(name = "用户登录", value = "/login")public Object login(LoginForm loginForm, HttpServletResponse response) {return userService.login(loginForm, response);}@PostMapping(name = "获取验证码",value = "/getCode")public Object getValidationCode(String phoneNumber) {return userService.getValidationCode(phoneNumber);}}

service

    @Overridepublic Object insertUser(UserInsertForm userInsertForm) {String code = redisService.get(PhoneCodeKey.phoneCodeKey, userInsertForm.getPhoneNumber(), String.class);if (!code.equals(userInsertForm.getCode())) {throw new GlobalException(ResultEnum.PHONE_CODE_ERROR);}String password = userInsertForm.getPassword();password = new BCryptPasswordEncoder().encode(password);userInsertForm.setPassword(password);User user = new User();BeanUtils.copyProperties(userInsertForm, user);user.setRole(1);if (insert(user)) {return ResultVOUtil.success();}return ResultVOUtil.error(ResultEnum.SERVER_ERROR);}@Overridepublic Object getValidationCode(String phoneNumber) {String code = AliyunSmsUtils.setCode();try {AliyunSmsUtils.sendInsertUserMsg(phoneNumber, code, TemplateCodeEnum.INSERTUSER.getValue());redisService.set(PhoneCodeKey.phoneCodeKey, phoneNumber, code);return ResultVOUtil.success(code);} catch (ClientException e) {log.info("失败原因: {}", e.getMessage());return ResultVOUtil.error(ResultEnum.PHONE_CODE_SEND_ERROR);}}

form

@Data
public class LoginForm {@NotNull(message = "手机号不能为空")@ApiModelProperty("手机号码")private String phoneNum;@NotNull(message = "密码不能为空")@ApiModelProperty("密码")private String password;}
@Data
public class UserInsertForm {@NotNull(message = "注册手机号码不能为空")@ApiModelProperty("注册手机号码")private String phoneNumber;@NotNull(message = "注册密码不能为空")@ApiModelProperty("注册密码")private String password;@NotNull(message = "注册用户名不能为空")@ApiModelProperty("注册用户名")private String username;@NotNull(message = "注册验证码不能为空")@ApiModelProperty("注册验证码")private String code;}

使用swagger-ui测试

  • 发送验证码

数据库

登录

github传送门

springboot+springsecurity+阿里云短信服务验证实现注册登录相关推荐

  1. SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)

    前言 网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的 所以,基于这一点. 该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程 ...

  2. SpringBoot集成阿里云短信服务

    SpringBoot集成阿里云短信服务 1.准备工作 2.项目集成 2.1 添加依赖 2.2 配置文件 2.3 业务逻辑实现 在实际项目中经常有发送短信的功能,今天进说一下对接阿里云短信服务实现短信发 ...

  3. springboot集成阿里云短信服务,实现发送短信功能

    springboot集成阿里云短信服务,实现发送短信功能 准备工作: 1.登陆阿里云->进入控制台->开通短信服务(进入后根据提示开通) 2.充值(借人家平台发短信你以为不要钱的?我充了3 ...

  4. SpringBoot实现阿里云短信服务

    阿里云短信服务 了解阿里云用户权限 准备工作 开启子用户 新建一个用户组 创建用户并添加进用户组 开启阿里云短信服务 添加模板 添加签名 编写代码测试 新建项目 导入依赖 编写测试代码 开启redis ...

  5. Springboot整合阿里云短信服务

    目录 一.阿里云短信配置 1.开通短信服务​ 2. 申请模板 3.申请签名 二.springboot中集成阿里云短信服务 0.pom中引入依赖 1.配置application.properties 2 ...

  6. SpringBoot集成阿里云短信服务实现登录注册(超详细)

    本篇博客采用得技术为:springboot + redis + aliyun短信验证 redis我用来做短信校验,首先我们先刨除redis部分做一个发送功能 登录你得阿里云账号 1 -> 控制台 ...

  7. vue+springboot+阿里云短信服务(集成redis实现验证码登录业务)

    阿里云短信服务-介绍 阿里云短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力.调用API或用群发助手,即可发送验证码.通知类和营销类短信:国内验 ...

  8. SpringBoot+阿里云短信服务实现发送短信验证码功能

    目录 一.登陆阿里云,开通短信服务(收费的,需要充值,1元能发20条左右),并获取AccessKeyId和AccessKeySecret 二.创建短信模板与签名 三.引入依赖 四.准备工作已完成,编码 ...

  9. springboot整合阿里云短信验证(无需签名和模板,通过阿里云api测试实现短信验证)

    一.开通阿里云短信服务 开通步骤如下图所示 开通完成后,进入阿里云短信验证首页,点击国内消息 一般来说,在短信验证时需要签名管理和模板管理,但是签名管理需要备案或者上线服务,所以对于没有备案和上线应用 ...

最新文章

  1. 数据产品必知的4层技术知识
  2. 成为LINUX系统管理员几点规则
  3. Leetcode算法题(C语言)6--只出现一次的数字
  4. C++ Primer 第三章 标准库类型 笔记
  5. grub.conf解析
  6. 凸包算法 Matlab实现
  7. 2021信息安全工程师考试汇总--1220更新考试结果
  8. 7-2 两个有序链表序列的合并 (20分)
  9. 神经元模型和BP网络
  10. android图片颜色识别器,颜色识别器APP
  11. SSM 框架原理简介及解析
  12. sql 纵向求和_SQL中求和函数SUM()的应用实例
  13. 基于用户的产品分析之Cohort Analysis(群组分析,留存分析)
  14. Buffon's Needle An Analysis and Simulation------蒙特卡洛法模拟蒲丰(Buffon)投针实验-使用Matlab
  15. Linux ALSA 之九:ALSA ASOC Codec Driver
  16. centos7下安装mycat2
  17. 彻底对一个男人失望的瞬间
  18. linux网络服务器笔记
  19. 输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。
  20. 第21课 微信小程序视频标签显示弹幕

热门文章

  1. iphone4国行终于来了
  2. 数据结构入门1(认识数据结构)
  3. 360和360极速浏览器无法打开vue项目的问题
  4. Alexa详细排名数据完成
  5. 二维四象限,就是从非此即彼的二分法里解放出来
  6. freemaker生成doc文档(特殊字符导致异常)
  7. 直播风口之下,视频社交会成为下一个流量平台吗?
  8. 【数字孪生】数字孪生十问:分析与思考
  9. 二进制形式配置k8s集群(二)-生成证书
  10. 计算机保研边缘er如何华丽逆袭?