java web实现邮箱激活与忘记密码
作者:Garry1115 发布时间:2023-11-18 09:35:26
标签: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();
}
至此,激活邮箱和忘记密码功能已初步完成!如有不同看法的朋友,请留下您宝贵的意见或建议。
来源:https://blog.csdn.net/zwx19921215/article/details/44494543
0
投稿
猜你喜欢
- 概述:Spring Boot 2.0相对于之前的版本,变化还是很大的。首先对jdk的版本要求已经不能低于1.8,其次依赖的spring的版本
- 这篇文章主要介绍了JAVA实现账户取款和存款操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到
- 我们知道HashMap集合是允许存放null值的hashMap是根据key的hashCode来寻找存放位置的,那当key为null时, 怎么
- 1. strlen —— 求字符串长度1.1 strlen 的声明与用处strlen ,我们有一些英
- 大致思路:注解实现方式:就是用 反射机制. 获取指定的包下使用了注解的类,存储在一个map容器, 然后获取map容器下类的属性, 利用反射给
- static修饰符是java里面非常常用的一个东西,用法也非常多。然而,在kotlin里竟然没有这个东西!那该如何替代呢?本文就总结了下ja
- 前言 实际业务开发中,集合的判断和操作也是经常
- MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作。为什么要
- 使用JAVA工程管理越来越多的jar包,担心导错了,多导了,漏导了怎么办?换一个IDE项目后项目会不会出一堆BUG,看的头皮发麻?自己写的代
- 微服务治理Spring Cloud 工具套件为微服务治理提供了全面的技术支持。这些治理工具主要包括服务的注册与发现、负载均衡管理、动态路由、
- 最近做一个需求,需求中的bean只用于生成一次json使用,所以想通过配置来动态的生成,查了一下,java还真有这个实现。java动态的生成
- 一、缩略图在浏览相册的时候,可能需要生成相应的缩略图。直接上代码:public class ImageUtil { private Logg
- WPF实现一个简单的多运算符表达式计算器,供大家参考,具体内容如下1.先看下效果图首先外围给了一个grid 把他分成了两行 第一行用来显示文
- 一、介绍在实际的软件项目开发过程中,我可以很负责任的跟大家说,如果你真的实际写代码的时间超过5年,你对增删改查这类简单的功能需求开发,可以说
- 前言枚举在java里也算个老生长谈的内容了,每当遇到一组需要类举的数据时我们都会自然而然地使用枚举类型:public enum Color
- 一,项目简介经过调查研究进行开发设计的这款仓库管理系统,主要是为商家提供商品货物进销存的信息化管理,以便让商家在竞争如此激烈的今天占据一定的
- 本文实例讲述了Android中断线程的处理方法。分享给大家供大家参考。具体方法如下:我现在对一个用户注册的功能1.用ProgressDial
- package com.test; import java.io.BufferedReader; import jav
- Java NIO(New IO)是Java 1.4版本中引入的一套全新的IO处理机制,与之前的传统IO相比,NIO具有更高的可扩展性和灵活性