通过第三方接口发送短信验证码/短信通知
需求:将首次交付密码为公共默认密码的方式改为点击入职功能,用短信方式发送系统自动生成的八位含数字、大小写字母和特殊符号生成的密码。短信发送服务由云通信http://www.yuntongxun.com/提供。
随机密码生成方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
/**
* 生成随即密码
* @author chao.gao
* @param pwd_len 生成的密码的总长度
* @return 密码的字符串
*/
public
static
String genRandomNum(
int
pwd_len) {
// String re="(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&]).{10,}";
String regex =
"^(?![0-9]+$)(?![a-zA-Z]+$)[A-Za-z0-9@#$%]{8,16}$"
;
//35是因为数组是从0开始的,26个字母+10个数字
final
int
maxNum =
26
;
int
i;
//生成的随机数
int
count =
0
;
//生成的密码的长度
char
[] str = {
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
};
char
[] upChar = {
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
'I'
,
'J'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
'Q'
,
'R'
,
'S'
,
'T'
,
'U'
,
'V'
,
'W'
,
'X'
,
'Y'
,
'Z'
};
char
[] numChar = {
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
};
char
[] speChar = {
'!'
,
'@'
,
'#'
,
'$'
,
'%'
};
StringBuffer pwd =
new
StringBuffer(
""
);
Random r =
new
Random();
while
(count <
2
) {
//生成随机数,取绝对值,防止生成负数,
i = Math.abs(r.nextInt(maxNum));
//生成的数最大为36-1
if
(i >=
0
&& i < str.length) {
pwd.append(str[i]);
count++;
}
}
count=
0
;
while
(count <
2
) {
//生成随机数,取绝对值,防止生成负数,
i = Math.abs(r.nextInt(
7
));
//生成的数最大为7-1
if
(i >=
0
&& i < upChar.length) {
pwd.append(upChar[i]);
count++;
}
}
count=
0
;
while
(count <
2
) {
//生成随机数,取绝对值,防止生成负数,
i = Math.abs(r.nextInt(maxNum));
//生成的数最大为10-1
if
(i >=
0
&& i < numChar.length) {
pwd.append(numChar[i]);
count++;
}
}
count=
0
;
while
(count <
2
) {
//生成随机数,取绝对值,防止生成负数,
i = Math.abs(r.nextInt(maxNum));
//生成的数最大为10-1
if
(i >=
0
&& i < speChar.length) {
pwd.append(speChar[i]);
count++;
}
}
return
pwd.toString();
}
|
发送短信接口:(jar包见附件)
参考:
https://www.yuntongxun.com/doc/rest/sms/3_2_2_3.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public
class
SDKTestSendTemplateSMS {
public
static
void
main(String[] args) {
HashMap<String, Object> result =
null
;
CCPRestSDK restAPI =
new
CCPRestSDK();
restAPI.init(
"app.cloopen.com"
,
"8883"
);
// 初始化服务器地址和端口,生产环境配置成app.cloopen.com,端口是8883.
restAPI.setAccount(
"accountSid"
,
"accountToken"
);
// 初始化主账号名称和主账号令牌,登陆云通讯网站后,可在"控制台-应用"中看到开发者主账号ACCOUNT SID和
主账号令牌AUTH TOKEN。
restAPI.setAppId(
"AppId"
);
// 初始化应用ID,如果是在沙盒环境开发,请配置"控制台-应用-测试DEMO"中的APPID。
//如切换到生产环境,请使用自己创建应用的APPID
result = restAPI.sendTemplateSMS(
"号码1,号码2等"
,
"模板Id"
,
new
String[]{
"模板内容1"
,
"模板内容2"
});
System.out.println(
"SDKTestGetSubAccounts result="
+ result);
if
(
"000000"
.equals(result.get(
"statusCode"
))){
//正常返回输出data包体信息(map)
HashMap<String,Object> data = (HashMap<String, Object>) result.get(
"data"
);
Set<String> keySet = data.keySet();
for
(String key:keySet){
Object object = data.get(key);
System.out.println(key +
" = "
+object);
}
}
else
{
//异常返回输出错误码和错误信息
System.out.println(
"错误码="
+ result.get(
"statusCode"
) +
" 错误信息= "
+result.get(
"statusMsg"
));
}
}
}
|
附件:http://down.51cto.com/data/2368103
本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/1843803,如需转载请自行联系原作者