@Log("重置密码-输入手机号,点击下一步")
@PostMapping("/forget/step1")
@ResponseBody
R forget1(String phoneNumber) {
// 用户名是不是已经被注册
UserDO userDO = userService.getByUserName(phoneNumber); // 查询该用户名信息
System.out.println("forget1 :" + userDO.getEmail());
if (userDO != null) {
String xingxing = "************************************************************";
String zi01 = userDO.getEmail().split("\\@")[0];
String zi02 = userDO.getEmail().split("\\@")[1];
int changdu = zi01.length() - 4;
String xin = zi01.substring(0, 4) + xingxing.substring(0, changdu) + "@" + zi02;
String zhi = UUID.randomUUID().toString() + ":" + phoneNumber;
System.out.println("forget2 :" + zhi);
//将邮箱确认信息添加到redis中,0表示未确认,1表示邮箱已经确认过
if (redisTemplate.opsForHash().hasKey("fogetPwd:mailConform", phoneNumber)) {
System.out.println("forget3 :" + zhi);
redisTemplate.opsForHash().delete("fogetPwd:mailConform", phoneNumber);
redisTemplate.opsForHash().put("fogetPwd:mailConform", phoneNumber, zhi); //未确认是0,已确认是1
} else {
System.out.println("forget4 :" + zhi);
redisTemplate.opsForHash().put("fogetPwd:mailConform", phoneNumber, zhi);
}
String hreff = "http://ip:端口/forget/mailConform/" + zhi;
//往邮箱发送一个字符串
sendHTMLMail(userDO, hreff);
return R.ok("已经向" + xin + "发送了邮件,请前往确认!");
} else {
return R.error("没有该手机号的注册信息!");
}
}
void sendHTMLMail(UserDO userDO, String content) {
MimeMessage message;
System.out.println("mail send 01 ");
try {
message = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message, true, "utf-8");
mimeMessageHelper.setFrom("365556466@qq.com", "大步学习");
mimeMessageHelper.setTo(userDO.getEmail());
mimeMessageHelper.setSubject("密码重置确认");
StringBuilder sb = new StringBuilder();
sb.append("<h1>密码重置确认</h1>")
.append("<a href='" + content + "'>" + "点击这里" + "</a>");
mimeMessageHelper.setText(sb.toString(), true);
javaMailSender.send(message);
} catch (Exception e) {
e.printStackTrace();
System.out.println("邮件发送失败 ");
logger.error("邮件发送失败", e.getMessage());
}
}
@Log("点击邮箱中的链接,会调用此接口")
@RequestMapping("/forget/mailConform/{content}")
@ResponseBody
String mailConform(@PathVariable("content") String content) {
System.out.println("forget/mailConform :" + content);
String phoneNumber = content.split("\\:")[1];
if (redisTemplate.opsForHash().hasKey("fogetPwd:mailConform", phoneNumber)) {
if (redisTemplate.opsForHash().get("fogetPwd:mailConform", phoneNumber).equals(content)) {
redisTemplate.opsForHash().delete("fogetPwd:mailConform", phoneNumber);
redisTemplate.opsForHash().put("fogetPwd:mailConform", phoneNumber, "1"); //未确认是0,已确认是1
}
}
return "请回到密码重置页,继续操作";
}
@Log("重置密码-点击邮箱确认继续")
@PostMapping("/forget/step2")
@ResponseBody
R forget2(String phoneNumber) {
//将邮箱确认信息添加到redis中,0表示未确认,1表示邮箱已经确认过
if (redisTemplate.opsForHash().hasKey("fogetPwd:mailConform", phoneNumber)) {
String zhi = redisTemplate.opsForHash().get("fogetPwd:mailConform", phoneNumber).toString();
if (zhi.equals("1")) {
return R.ok();
} else {
return R.error("邮箱未确认!!!");
}
}
return R.error("邮箱未确认!!!");
}
@Log("重置密码-点击邮箱确认继续")
@RequestMapping("/forget/step3")
@ResponseBody
R forget3(String phoneNumber, String pwd) {
System.out.println(phoneNumber + " :" + pwd);
try {
System.out.println("update 0");
UserDO userDO = userService.getByUserName(phoneNumber); // 查询该用户名信息
userDO.setPassword(MD5Utils.encrypt(phoneNumber, pwd)); //登录密码
System.out.println("update 1");
userService.update(userDO);
System.out.println("update 2");
return R.ok();
} catch (Exception e) {
e.printStackTrace();
return R.error();
}
}
FR:徐海涛(hunk Xu)
QQ技术交流群:386476712