java實現阿里雲簡訊驗證註冊--詳細教程
阿新 • • 發佈:2021-02-02
java實現阿里雲簡訊驗證註冊–詳細教程
- .專案中先引入依賴
<!--阿里雲簡訊包-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
- .在配置檔案中配置相關的資訊
- .控制層程式碼
//傳送簡訊驗證碼
@GetMapping(value = "/sendsms/{phone}" )
public RestResponse sendSms(@PathVariable String phone) {
try {
userService.sendSms(phone);
return RestResponse.ok("傳送成功");
} catch (Exception e) {
e.printStackTrace();
return RestResponse.fail(2, e.getMessage());
}
}
- .業務層程式碼
//傳送簡訊
@Override
public void sendSms(String phone) {
User user = userStudentMapper.selectOne(
new LambdaQueryWrapper<User>()
.eq(StringUtils.isNotBlank(phone), User::getPhone, phone)
.last("limit 1")
);
if (ObjectUtil.isNotNull(user)) {
throw new RuntimeException("您已註冊~");
}
String code = RandomStringUtils.randomNumeric(6);
String accessKeyId = env.getProperty("aliyun.sms.accesskeyid");
String accessSecret = env.getProperty("aliyun.sms.secret");
DefaultProfile profile = DefaultProfile.getProfile("default", accessKeyId, accessSecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("PhoneNumbers", phone);
request.putQueryParameter("SignName", signName);
request.putQueryParameter("TemplateCode", templateCode);
request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");
try {
CommonResponse response = client.getCommonResponse(request);
} catch (ClientException e) {
e.printStackTrace();
}
redisTemplate.opsForValue().set("code:" + phone, code, 5, TimeUnit.MINUTES);
}
- 註冊控制層
/**
* 註冊
*/
@PostMapping("/register/{code}")
public RestResponse register(@PathVariable String code, @RequestBody User user) {
String password = user.getPassword();
if (password.length() < 6) {
return RestResponse.fail(SystemCode.ParameterValidError.getCode(), "密碼不能少於六位~");
}
String checkCode = redisTemplate.opsForValue().get("code:" + user.getUserName());
if (StringUtils.isEmpty(checkCode)) {
return RestResponse.fail(SystemCode.ParameterValidError.getCode(), "請重新獲取驗證碼~");
}
if (!code.equals(checkCode)) {
return RestResponse.fail(SystemCode.ParameterValidError.getCode(), "驗證碼不正確~");
}
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getUserName, user.getUserName());
User user1 = userStudentMapper.selectOne(lambdaQueryWrapper);
if (user1 != null) {
return RestResponse.fail(SystemCode.ParameterValidError.getCode(), "該手機號已註冊啦~");
}
try {
String encodePwd = authenticationService.pwdEncode(user.getPassword());
user.setPassword(encodePwd);
user.setRole(1);
userService.register(code, user);
return RestResponse.ok("註冊成功");
} catch (Exception e) {
e.printStackTrace();
return RestResponse.fail(SystemCode.ParameterValidError.getCode(), e.getMessage());
}
}
- 註冊業務層
//註冊
@Override
public void register(String code, User user) {
user.setUserName(user.getUserName());
user.setPhone(user.getUserName());
user.setCreateTime(new Date());
user.setStatus(1);
user.setDeleted(false);
user.setUserUuid(UUID.randomUUID().toString());
userStudentMapper.insert(user);
}
程式碼有些不太規範,請見諒!