当前位置:   article > 正文

使用阿里云实现短信验证码_阿里云短信验证码

阿里云短信验证码

首先去阿里云中开启短信服务

然后申请自己的签名,发送的短信模板,之后点击右上角的头像,点击AccessKey,选第一个就行,然后保存这两个对应的值。

 在等待签名和发送模板通过审核之后就可以配置我们的发送方法,我们使用的是redis来存储发送的验证,用来起到验证作用。在Maven中添加需要使用的jar包

  1. <!-- 短信验证码-->
  2. <dependency>
  3. <groupId>com.aliyun</groupId>
  4. <artifactId>aliyun-java-sdk-core</artifactId>
  5. <version>4.4.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.aliyun</groupId>
  9. <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
  10. <version>1.0.0</version>
  11. </dependency>

 记得在添加自己redis的配置。

接下来是使用redis来存储数据的工具类

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.data.redis.core.RedisTemplate;
  3. import org.springframework.stereotype.Component;
  4. import java.util.concurrent.TimeUnit;
  5. @Component
  6. public class RedisUtils {
  7. @Autowired
  8. private RedisTemplate<String, String> redisTemplate;
  9. /**
  10. * 读取缓存
  11. *
  12. * @param key
  13. * @return
  14. */
  15. public String get(final String key) {
  16. return redisTemplate.opsForValue().get(key);
  17. }
  18. /**
  19. * 写入缓存
  20. */
  21. public boolean set(final String key, String value) {
  22. boolean result = false;
  23. try {
  24. redisTemplate.opsForValue().set(key, value);
  25. redisTemplate.expire(key,1, TimeUnit.MINUTES); //一分钟过期
  26. result = true;
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. return result;
  31. }
  32. /**
  33. * 更新缓存
  34. */
  35. public boolean getAndSet(final String key, String value) {
  36. boolean result = false;
  37. try {
  38. redisTemplate.opsForValue().getAndSet(key, value);
  39. result = true;
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. }
  43. return result;
  44. }
  45. /**
  46. * 删除缓存
  47. */
  48. public boolean delete(final String key) {
  49. boolean result = false;
  50. try {
  51. redisTemplate.delete(key);
  52. result = true;
  53. } catch (Exception e) {
  54. e.printStackTrace();
  55. }
  56. return result;
  57. }
  58. }

然后是调用发送短信的类,在阿里云操作界面点击这个

需要填的值,填到下方代码的空缺位置即可。

  1. import com.aliyuncs.CommonRequest;
  2. import com.aliyuncs.CommonResponse;
  3. import com.aliyuncs.DefaultAcsClient;
  4. import com.aliyuncs.IAcsClient;
  5. import com.aliyuncs.exceptions.ClientException;
  6. import com.aliyuncs.exceptions.ServerException;
  7. import com.aliyuncs.http.MethodType;
  8. import com.aliyuncs.profile.DefaultProfile;
  9. import com.example.ResumeIdentifySystem.uitl.RedisUtils;
  10. import org.apache.commons.lang3.RandomStringUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Component;
  13. @Component
  14. public class Message {
  15. @Autowired
  16. RedisUtils redisUtils;
  17. public static void messagePost(String u_phone, String message) {
  18. DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "填自己ID", "填自己Secret");
  19. IAcsClient client = new DefaultAcsClient(profile);
  20. CommonRequest request = new CommonRequest();
  21. request.setSysMethod(MethodType.POST);
  22. request.setSysDomain("dysmsapi.aliyuncs.com");
  23. request.setSysVersion("2017-05-25");
  24. request.setSysAction("SendSms");
  25. request.putQueryParameter("RegionId", "cn-hangzhou");
  26. request.putQueryParameter("PhoneNumbers", u_phone);
  27. request.putQueryParameter("SignName", "签名");
  28. request.putQueryParameter("TemplateCode", "******");
  29. request.putQueryParameter("TemplateParam", "{\"code\":" + message + "}");
  30. try {
  31. CommonResponse response = client.getCommonResponse(request);
  32. System.out.println(response.getData());
  33. } catch (ServerException e) {
  34. e.printStackTrace();
  35. } catch (ClientException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. //获取验证码
  40. public String authcode_get(String u_phone) {
  41. if(redisUtils.get(u_phone)==null){
  42. String authcode = "1" + RandomStringUtils.randomNumeric(5);//生成随机数,我发现生成5位随机数时,如果开头为0,发送的短信只有4位,这里开头加个1,保证短信的正确性
  43. redisUtils.set(u_phone, authcode);//将验证码存入redis缓存
  44. Message.messagePost(u_phone, authcode);//发送短息
  45. return "验证码发送成功";
  46. }
  47. return "该手机号已经发送过验证码,验证码时间还未到期";
  48. }
  49. //验证码登录
  50. public String authcode_login(String u_phone, String authcode) {
  51. if (redisUtils.get(u_phone).equals(authcode)) {
  52. return "验证码正确,登录成功";
  53. }
  54. return "验证码错误,登录失败";
  55. }
  56. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/393893
推荐阅读
相关标签
  

闽ICP备14008679号