1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Spring Boot 阿里云短信平台手机验证码测试

Spring Boot 阿里云短信平台手机验证码测试

时间:2023-08-25 11:21:26

相关推荐

Spring Boot 阿里云短信平台手机验证码测试

登录阿里云搜索短信服务充值两三块钱配置签名设置短信模板启动Redis创建 Spring Boot 工程

1. 导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.6.0</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.22</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>

2. 配置类

@Configurationpublic class AliyunMsgConfig {@ResourceMsgProperites msgProperites;@Beanpublic IAcsClient iAcsClient() throws ClientException {DefaultProfile profile = DefaultProfile.getProfile(msgProperites.getRegionId(), msgProperites.getAccessKeyId(), msgProperites.getAccessKeySecret());IAcsClient client = new DefaultAcsClient(profile);return client;}}

3. 配置属性类

@Data@Component@ConfigurationProperties("aliyun.msg")public class MsgProperites {private String regionId;private String accessKeyId;private String accessKeySecret;private String signName;private String templateCode;}

4. 配置文件

aliyun:msg:# "cn-beijing"regionid: "cn-hangzhou"access-key-id: ""access-key-secret: ""sign-name: ""template-code: spring:redis:host: 你的redis的IPport: 6379database: 1password: ""# s 表示 m 分钟 h 小时 d 天timeout: 3sjedis:pool:# 最大连接数max-active: 10# 连接池最大存活数max-idle: 8# 连接池最小存活数min-idle: 2

5. 业务层

发送短信

@Servicepublic class MsgServiceImpl implements MsgService {public static final String PREFIX_REDIS_KEY = "msg:phone:";@ResourceMsgProperites msgProperites;@ResourceIAcsClient client;@ResourceValueOperations<String, Object> valueOperations;@ResourceObjectMapper objectMapper;/*** @param phone* @return*/@Overridepublic String sendMsg(String phone) {String number = RandomUtil.randomNumbers(6);MsgTemplateParam msgTemplateParam = new MsgTemplateParam();msgTemplateParam.setCode(number);SendSmsRequest request = new SendSmsRequest();request.setPhoneNumbers(phone);request.setSignName(msgProperites.getSignName());request.setTemplateCode(msgProperites.getTemplateCode());try {request.setTemplateParam(objectMapper.writeValueAsString(msgTemplateParam));SendSmsResponse response = client.getAcsResponse(request);if ("OK".equals(response.getCode())) {valueOperations.set(PREFIX_REDIS_KEY + phone, number, Duration.ofMinutes(5));}} catch (ClientException | JsonProcessingException e) {}return "success";}}

6.验证码

@Datapublic class MsgTemplateParam {private String code;}

7. 用户业务层

验证码

获取验证码删除验证码

@Servicepublic class UserServiceImpl implements UserService {@ResourceValueOperations<String, Object> valueOperations;@ResourceRedisTemplate<String, Object> redisTemplate;@Overridepublic String login(String phone, String code) {String tempCode = (String) valueOperations.get(MsgServiceImpl.PREFIX_REDIS_KEY + phone);if (!ObjectUtils.isEmpty(tempCode) && tempCode.equals(code)) {//删除键redisTemplate.delete(MsgServiceImpl.PREFIX_REDIS_KEY + phone);return "sucess";}return null;}}

8. Redis 模板

/*** 1 定制Redistemplate* jackson* fastjson* <hasKey,Map<key,>>*/@Configurationpublic class RedisConfig {/*** @return*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 用户对象保存// user:1 user 转化json存redis// redisTemplate.setKeySerializer();// redisTemplate.setValueSerializer();// redisTemplate.setHashKeySerializer();// redisTemplate.setHashValueSerializer();// 配置序列化方式StringRedisSerializer serializer = new StringRedisSerializer();redisTemplate.setKeySerializer(serializer);redisTemplate.setHashKeySerializer(serializer);Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);//将自定的RedisTemplate注入到容器中redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}@Beanpublic ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForValue();}@Beanpublic ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForList();}@Beanpublic SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForSet();}@Beanpublic ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForZSet();}@Beanpublic HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForHash();}}

测试

@SpringBootTestclass SpringAliyunMsgApplicationTests {@ResourceUserService userService;@ResourceMsgService msgService;@Testvoid contextLoads() {msgService.sendMsg("你的电话");}@Testvoid login() {userService.login("你的电话", "637101");}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。