java web实现邮箱激活与忘记密码

 更新时间:2019年02月10日 11:29:34   作者:Garry1115  
这篇文章主要为大家详细介绍了java web实现邮箱激活与忘记密码、重置密码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

由于在项目中要实现用户注册的邮箱激活以及忘记密码重置密码功能,所以通过查阅资料做了一个简单的设计和实现。

邮箱激活

背景:几乎每个网站或论坛之类的用户注册后都需要通过发送邮件到邮箱激活用户。
设计:

激活步骤:

1、 发送激活操作链接地址至用户邮箱。
2、 用户至邮箱查收邮件。
3、 用户点击链接,跳转至成功页面(修改激活状态),激活成功。

实现:

/**
 * 发送邮件
 * 
 * @param request
 * @return
 */
 @RequestMapping(value = "/sendEmail.jhtml")
 @ResponseBody
 public String sendEmail(HttpServletRequest request) {
 DynamicParams params = new DynamicParams(request);
 StringBuilder builder = new StringBuilder();
 StringBuffer url = new StringBuffer();
 String type = params.getString("type");
 Long uid = params.getLong("id");
 User user = userManager.find(uid);
 String subject = "";
 
  // 判断是否已激活
  if ("1".equals(String.valueOf(user.getEmailStatus()))) {
  return errMsg();
  }
  String contextPath = request.getContextPath();
  String rUrl = String.valueOf(request.getRequestURL());
  url.append(rUrl.substring(0, rUrl.indexOf(contextPath)));
  url.append(contextPath + "/account");
  // 邮箱激活
  // url.append("/activateEmail.jhtml?email=" + user.getEmail() +
  // "&id=" + uid + "&mode=activate");
  url.append("/activateEmail.jhtml?id=" + uid + "&mode=activate");
  // 正文
  builder.append("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" </head><body>");
  builder.append("请点击下方链接激活您的邮箱,完成激活邮箱的操作!");
  builder.append("<br/><br/>");
  builder.append("<a href=\"" + url + "\">");
  builder.append(url);
  builder.append("</a>");
  builder.append("</body></html>");
  subject = "邮箱地址激活 - xxxx";
 
 MailSender.mailSimple(user.getEmail(), subject, builder.toString(),
  false, null);
 return successMsg();
 }
 
 /**
 * 激活邮箱
 * 
 * @param request
 * @return
 */
 @RequestMapping(value = "/activateEmail.jhtml")
 public String activateEmail(HttpServletRequest request, Model model) {
 DynamicParams params = new DynamicParams(request);
 // 激活之前查询
 User user = userManager.find(params.getLong("id"));
 
 if ("1".equals(String.valueOf(user.getEmailStatus()))) {
  // 已激活
  model.addAttribute("flag", false);
 } else {
  // 未激活
  userManager.activateEmail(params);
  // 激活之后查询
  user = userManager.find(params.getLong("id"));
  request.getSession().setAttribute("sessionUser", user);
  model.addAttribute("mode", params.getString("mode"));
  model.addAttribute("flag", true);
 }
 return "site/modules/account/activateSuccess";
 }

MailSender.mailSimple(user.getEmail(), subject, builder.toString(),false, null);即为发送邮件工具类,如有不明白可参考我之前的文章(spring mail发送邮件)

忘记密码(重置密码)

背景:同样是各大网站都会拥有的一个功能,通过发送验证码到用户注册的邮箱重置密码

设计:

1)输入用户名/手机号码/邮箱,验证码。
2)用户选择手机验证或邮箱验证,发送验证码到手机或邮箱。如果用户邮箱未激活,则不允许邮箱验证。
3)用户输入验证码成功,进入密码重新设置页面。
4)重置密码

流程:

实现:

 /**
 * 发送邮件
 * 
 * @param request
 * @return
 */
 @RequestMapping(value = "/sendEmail.jhtml")
 @ResponseBody
 public String sendEmail(HttpServletRequest request) {
 DynamicParams params = new DynamicParams(request);
 StringBuilder builder = new StringBuilder();
 StringBuffer url = new StringBuffer();
 String type = params.getString("type");
 Long uid = params.getLong("id");
 User user = userManager.find(uid);
 String subject = "";
 
  // type = forget 密码重置
  String verifyCode = VerifyCodeUtils.generateVerifyCode(4);
  request.getSession().setAttribute("resetCertCode", verifyCode);
  url.append("<font color='red'>" + verifyCode + "</font>");
  // 正文
  builder.append("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body>");
  builder.append("要使用新的密码, 请将已下字符输入验证框中,完成重置密码的操作!");
  builder.append("<br/><br/>");
  builder.append("<div>" + url + "</div>");
  builder.append("</body></html>");
  subject = "密码重置 - xxxx";
 
 MailSender.mailSimple(user.getEmail(), subject, builder.toString(),
  false, null);
 return successMsg();
 }

至此,激活邮箱和忘记密码功能已初步完成!如有不同看法的朋友,请留下您宝贵的意见或建议。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • mybatis-plus调用update方法时,自动填充字段不生效问题及解决

    mybatis-plus调用update方法时,自动填充字段不生效问题及解决

    这篇文章主要介绍了mybatis-plus调用update方法时,自动填充字段不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Spring Boot实现邮件服务(附:常见邮箱的配置)

    Spring Boot实现邮件服务(附:常见邮箱的配置)

    这篇文章主要给大家介绍了关于Spring Boot实现邮件服务的相关资料,文中还附上了常见邮箱的配置,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Hibernate双向一对一映射关系配置代码实例

    Hibernate双向一对一映射关系配置代码实例

    这篇文章主要介绍了Hibernate双向一对一映射关系配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 详解spring-data-jpa中jpql的投影查询

    详解spring-data-jpa中jpql的投影查询

    投影查询,就是仅仅检索表的部分字段。而不是粗暴的 SELECT * FROM...检索出所有列数据,这篇文章主要介绍了spring-data-jpa中jpql的投影查询,需要的朋友可以参考下
    2021-09-09
  • Java Stream中自定义Collector实现复杂数据收集的方法

    Java Stream中自定义Collector实现复杂数据收集的方法

    Java Stream API中的Collector接口是一个强大的工具,它允许我们自定义数据收集、转换和聚合的过程,,本文介绍了Java Stream中自定义Collector实现复杂数据收集方法,需要的朋友可以参考下
    2024-08-08
  • springboot实现https双向传输协议的示例代码

    springboot实现https双向传输协议的示例代码

    本文主要介绍了springboot实现https双向传输协议的示例代码,包含配置证书和私钥路径、调用请求方法等步骤,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • 浅谈单例模式和线程安全问题

    浅谈单例模式和线程安全问题

    这篇文章主要介绍了浅谈单例模式和线程安全问题,再某些特殊的情况下,存在一个类仅能用来产生一个唯一对象的必要性,因此需要单例模式,需要的朋友可以参考下
    2023-04-04
  • 聊聊Redis的单线程模型

    聊聊Redis的单线程模型

    Redis是单线程,主要是指Redis的网络IO和读写是由一个线程来完成的,但Redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。这不是本文讨论的重点,有个印象即可
    2022-12-12
  • Java多线程ThreadPoolExecutor详解

    Java多线程ThreadPoolExecutor详解

    这篇文章主要介绍了Java多线程ThreadPoolExecutor详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • java如何将Object数组转换为指定类型数组

    java如何将Object数组转换为指定类型数组

    这篇文章主要介绍了java如何将Object数组转换为指定类型数组,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论