详情可参考阿里云官方文档: 开始使用 - 阿里云SDK - 阿里云
首先进入阿里云开通短信服务 并且申请阿里云签名和模板
redis安装详见 centos redis安装及相关命令_lanan_dream的博客-CSDN博客_centos redis 安装
1、配置类中引入redis配置:固定写法,复制即可
@EnableCaching @Configuration public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);template.setConnectionFactory(factory);//key序列化方式template.setKeySerializer(redisSerializer);//value序列化template.setValueSerializer(jackson2JsonRedisSerializer);//value hashmap序列化template.setHashValueSerializer(jackson2JsonRedisSerializer);return template;}@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);//解决查询缓存转换异常的问题ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);// 配置序列化(解决乱码的问题),过期时间600秒RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();RedisCacheManager cacheManager = RedisCacheManager.builder(factory).cacheDefaults(config).build();return cacheManager;} }
引入Maven依赖:
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.3.3</version> </dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version> </dependency>
业务逻辑层----service:
注:TemplateParam参数必须为JSON格式的字符串,可使用fastJSON的 JSONObject.toJSONString()方法将map转为JSON格式字符串
public boolean send(Map<String, Object> param, String phone) {if (StringUtils.isEmpty(phone)) {return false;}DefaultProfile profile =DefaultProfile.getProfile("default", "阿里云账号ID", "阿里云账号秘钥");IAcsClient client = new DefaultAcsClient(profile);//设置相关参数CommonRequest request = new CommonRequest();//request.setProtocol(ProtocolType.HTTPS);//固定写法request.setMethod(MethodType.POST);//请求方法request.setDomain("dysmsapi.aliyuncs.com");//阿里云发送request.setVersion("2017-05-25");//版本request.setAction("SendSms");//发送方法//设置发送相关的参数request.putQueryParameter("PhoneNumbers", phone);//设置发送的手机号码request.putQueryParameter("SignName", "*****");//*****为阿里云申请的签名名称request.putQueryParameter("TemplateCode", "*****");//*****为阿里云申请的模板IDrequest.putQueryParameter("TemplateParam", JSONObject.toJSONString(param));//设置验证码 参数需要是json格式字符串try {CommonResponse response = client.getCommonResponse(request); // System.out.println(response.getData());return response.getHttpResponse().isSuccess();//是否发送成功} catch (Exception e) {e.printStackTrace();}return false;}
控制层Controller:
@Autowiredprivate MsmService msmService;@Autowiredprivate RedisTemplate<String,String> redisTemplate;//发送短信@GetMapping("send/{phone}")public R sendMsm(@PathVariable String phone) {String code = "";code = RandomUtil.getSixBitRandom();//使用工具类生成随机六位数验证码Map<String,Object> param = new HashMap<>();param.put("code",code);定义一个Map用于存储验证码//调用service发送短信boolean isSend = msmService.send(param,phone);if (isSend) {//发送成功,把验证码放到redis里面,设置有效时间5分钟redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);return R.ok();}else {return R.error().message("短信发送失败");}}