阿里云短信认证

落日映苍穹つ 2022-12-07 12:14 379阅读 0赞

在这里插入图片描述
依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.62</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.aliyun</groupId>
  8. <artifactId>aliyun-java-sdk-core</artifactId>
  9. <version>4.5.8</version>
  10. </dependency>

配置文件

  1. server.port=2525
  2. spring.application.name=msgsend
  3. spring.cloud.nacos.server-addr=localhost:8848
  4. spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
  5. management.endpoints.web.exposure.include=*
  6. spring.cloud.sentinel.enabled=true
  7. spring.cloud.sentinel.transport.dashboard=localhost:9817
  8. spring.cloud.sentinel.transport.port=8719
  9. #Redis
  10. # Redis数据库索引(默认为0)
  11. spring.redis.database=0
  12. spring.redis.host=(主机)
  13. ## Redis服务器连接端口
  14. spring.redis.port=(端口)
  15. ## 连接超时时间(毫秒)
  16. spring.redis.timeout=500
  17. ## Redis服务器连接密码(默认为空)
  18. spring.redis.password=(密码)
  19. ## 连接池中的最大连接数
  20. spring.redis.poolMaxTotal=10
  21. ## 连接池中的最大空闲连接
  22. spring.redis.poolMaxIdle=10
  23. ## 连接池最大阻塞等待时间(使用负值表示没有限制)
  24. spring.redis.poolMaxWait=3

service

  1. public interface MsgSendService {
  2. Boolean sendMsg(Map<String,Object> param,String phone);
  3. }

impl
需要自己准备:
accessKeyId accessKeySecret 阿里云签名名称 申请阿里云模板code

  1. @Service
  2. public class MsgSendServiceImpl implements MsgSendService {
  3. @Override
  4. public Boolean sendMsg(Map<String, Object> param, String phone) {
  5. if(StringUtils.isEmpty(phone)) return false;
  6. DefaultProfile profile =
  7. DefaultProfile.getProfile("default", "accessKeyId(自己的)", "accessKeySecret(自己的)");
  8. IAcsClient client = new DefaultAcsClient(profile);
  9. //设置相关固定的参数,都是固定的
  10. CommonRequest request = new CommonRequest();
  11. //request.setProtocol(ProtocolType.HTTPS);
  12. request.setMethod(MethodType.POST);//提交方式默认的不能改
  13. request.setDomain("dysmsapi.aliyuncs.com");
  14. request.setVersion("2017-05-25");
  15. request.setAction("SendSms");
  16. //设置发送相关的参数
  17. request.putQueryParameter("PhoneNumbers",phone); //手机号
  18. request.putQueryParameter("SignName","阿里云 签名名称"); //申请阿里云 签名名称
  19. request.putQueryParameter("TemplateCode","申请阿里云 模板code"); //申请阿里云 模板code
  20. request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param)); //验证码数据,转换json数据传递
  21. try {
  22. //最终发送
  23. CommonResponse response = client.getCommonResponse(request);
  24. boolean success = response.getHttpResponse().isSuccess();
  25. return success;
  26. }catch(Exception e) {
  27. e.printStackTrace();
  28. return false;
  29. }
  30. }
  31. }

然后是controller
因为验证码是有时效的,所以用redis存储,这里给5分钟,先看redis里面有无验证码,有就成功,没有就发送验证码

  1. @RestController
  2. @Slf4j
  3. @CrossOrigin
  4. public class MsgSendController {
  5. @Autowired
  6. private MsgSendService msgSendService;
  7. @Autowired
  8. private RedisTemplate<String,String> redisTemplate;
  9. @GetMapping("/sendMsg/{phone}")
  10. public ResultMsg sendMsg(@PathVariable String phone){
  11. //从redis中获取是否含有验证码,key用手机号
  12. String ranCode = redisTemplate.opsForValue().get(phone);
  13. if (!StringUtils.isEmpty(ranCode)){
  14. ResultMsg.successMsg();
  15. }
  16. //如果获取不到就进行阿里云发送
  17. String code= RandomUtil.getFourBitRandom();
  18. Map<String,Object> codMap=new HashMap<>();
  19. codMap.put("code",code);
  20. //这里调用service发送短信方法
  21. Boolean isSend=msgSendService.sendMsg(codMap,phone);
  22. if(isSend){
  23. //这里如果发送成功,验证码就存进redis中
  24. redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
  25. return ResultMsg.successMsg();
  26. }else {
  27. return ResultMsg.failMsg().message("短信发送失败");
  28. }
  29. }
  30. }

启动访问:
跟自己的号码
在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,379人围观)

还没有评论,来说两句吧...

相关阅读

    相关 阿里服务

    在开发过程中遇到过短信服务,推荐使用阿里云。个人申请阿里云短信服务确实有些困难,下面我先来简单说一下我的个人申请过程(仅供参考)。 1、申请签名流程 作为开发者,我们大