短信验证码的发送
我们使用较简单的方法: 使用第三方:阿里云
1.注册阿里云的账号
2.开通短信服务
3.申请签名
4.配置模版
这个有很详细的解说,网上
官方网站:https://www.aliyun.com/product/sms?spm=5176.19720258.J_8058803260.611.48192c4abPvXEp
1.使用在线调试得到代码模版(Template)
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
import com.aliyun.teaopenapi.models.Config;
public class Sample {
public static void main(String[] args_) throws Exception {
String accessKeyId = "LTAI4GKgob9vZ53k2SZdyAC7";
String accessKeySecret= "LHLBvXmILRoyw0niRSBuXBZewQ30la";
//配置阿里云
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "dysmsapi.aliyuncs.com";
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers("*******")
.setSignName("ABC商城")
.setTemplateCode("********")
.setTemplateParam("{\"code\":\"1234\"}");
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse response = client.sendSms(sendSmsRequest);
SendSmsResponseBody body = response.getBody();
}
}
这个是阿里云提供的一个模版,进行简单的修改
2.自动装配
这个发送短信的功能已经完成,可是如果你有很多种工具类,就需要配置很多吗?
使用springboot的自动配置
1.扫描依赖模块中的META-INF/spring.factories
2.执行装配类的方法
3.对象存入容器中
4.核心工程注入对象,调用使用方法
2.1首先在工程中定义一个Smstemplate
mport com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.tanhua.autoconfig.properties.SmsProperties;
public class SmsTemplate {
private SmsProperties properties;
public SmsTemplate(SmsProperties properties) {
this.properties = properties;
}
public void sendSms(String mobile,String code) {
try {
//配置阿里云
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(properties.getAccessKey())
// 您的AccessKey Secret
.setAccessKeySecret(properties.getSecret());
// 访问的域名
config.endpoint = "dysmsapi.aliyuncs.com";
com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config);
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(mobile)
.setSignName(properties.getSignName())
.setTemplateCode(properties.getTemplateCode())
.setTemplateParam("{\"code\":\""+code+"\"}");
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse response = client.sendSms(sendSmsRequest);
SendSmsResponseBody body = response.getBody();
System.out.println(body.getMessage());
}catch (Exception e) {
e.printStackTrace();
}
}
}
2.2配置自动装配类
import com.tanhua.autoconfig.properties.SmsProperties;
import com.tanhua.autoconfig.template.SmsTemplate;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
public class TanhuaAutoConfiguration {
@Bean
public SmsTemplate smsTemplate() {
return new SmsTemplate();
}
}
自我觉得写完类名之后先写@EnableConfigurationProperties({ SmsProperties.class})
2.3添加配置spring.factories,写在META-INF下(自己创建文件夹在resources下)
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.tanhua.autoconfig.TanhuaAutoConfiguration
2.4至于accessKeyId 和 accessKeySecret,不使用硬编码的格式,我们需要再yml文件下进行配置
步骤:
1.定义一个SmsProperties,通过@ConfigurationProperties指定文件的前缀
2.用构造方法将配置文件SmsProperties传入Template对象
3.添加自动配置文件那个(@EnableConfigurationProperties)使Properties对象生效
2.4.1
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "tanhua.sms")
public class SmsProperties {
private String signName;
private String templateCode;
private String accessKey;
private String secret;
}
然后才有下面这段代码
private SmsProperties properties;
public SmsTemplate(SmsProperties properties) {
this.properties = properties;
}
2.4.2这个时候其实是有问题的,自动装配的时候不能用无参构造,让其自动获取properties
@EnableConfigurationProperties({
SmsProperties.class
})
public class TanhuaAutoConfiguration {
@Bean
public SmsTemplate smsTemplate(SmsProperties properties) {
return new SmsTemplate(properties);
}
}