一、准备阿里云短信配置
这里不做过多赘述,从阿里云控制台申请短信模板
二、引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-sms-spring-boot-starter</artifactId>
</dependency>
三、常量
/** * 产品名称: 云通信短信API产品,开发者无需替换 */ static final String PRODUCT = "Dysmsapi"; /** * 产品域名,开发者无需更换 */ static final String DOMAIN = "dysmsapi.aliyuncs.com"; /** * 阿里云地域信息 */ static final String END_POINT_NAME = "cn-hangzhou";
发送短信工具类
public IAcsClient acsClient;
/**
* 配置超时时间,初始化acsClient
*/
public IAcsClient getInstant() {
if (acsClient == null) {
// 配置超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile(END_POINT_NAME, aliSmsProperties.getAccessKeyId(),
aliSmsProperties.getAccessKeySecret());
try {
DefaultProfile.addEndpoint(END_POINT_NAME, END_POINT_NAME, PRODUCT, DOMAIN);
} catch (ClientException e) {
throw new RuntimeException(e);
}
return new DefaultAcsClient(profile);
}
return acsClient;
}
/**
* 创建短信发送请求
* @param mobile 手机号
* @param jsonObject json数据
* @param templateCode 短信模板
* @return
* @throws ClientException
*/
public SendSmsResponse getSmsCodeClient(String mobile, JSONObject jsonObject, String templateCode) throws ClientException {
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//修改数据提交方式
request.setMethod(MethodType.POST);
//修改数据交互格式
request.setAcceptFormat(FormatType.JSON);
//必填:待发送手机号
request.setPhoneNumbers(mobile);
//必填:短信签名-可在短信控制台中找到
request.setSignName(aliSmsProperties.getSignName());
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateCode);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam(jsonObject.toString());
return getInstant().getAcsResponse(request);
}
/**
* 发送短信
*
* @param mobile 手机号码
* @param jsonObject json数据
* @param templateCode 短信模板
* @return
*/
public SendSmsResponse sendSms(String mobile, JSONObject jsonObject, String templateCode) {
SendSmsResponse smsResponse = null;
try{
smsResponse = getSmsCodeClient(mobile,jsonObject,templateCode);
} catch (ClientException e) {
e.printStackTrace();
}
// 发生业务错误
if ("isv.BUSINESS_LIMIT_CONTROL".equals(smsResponse.getCode())) {
String message = smsResponse.getMessage();
String limitNum = message.substring(message.length() - 1);
if ("5".equals(limitNum)) {
// 此处可自定义业务异常
throw new RuntimeException("获取次数已达上线,请过一小时再试");
} else if (limitNum.equals("0")) {
throw new RuntimeException("获取次数已达上线,请明日再试");
} else if (limitNum.equals("1")) {
throw new RuntimeException("获取次数已达上线,请过一分钟再试");
}
}
return smsResponse;
}
四、上传到Maven私库
因为发布jar包涉及到snapshots和releases仓库,所以需要配置这两个的仓库的访问权限,同样的这是针对禁用了匿名访问的操作的,如果没有禁用匿名访问,这里不用配置
<server>
<id>maven-releases</id>
<username>Maven私库用户名</username>
<password>密码</password>
</server>
<server>
<id>maven-snapshots</id>
<username>Maven私库用户名</username>
<password>密码</password>
</server>
在需要上传的模块POM文件中添加相关代码
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>Releases Repository</name>
<url>https://私库地址/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>Snapshot Repository</name>
<url>https://私库地址/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
然后点击部署deploy就可以将项目发布到Nexus了
上传成功