本文分享自微信公众号 - 浩Coding(gh_c4a2e63d2ca7),作者:浩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

如题,我们做网站的时候,往往需要用户注册,很多用户选择用邮箱注册,为了获取用户的真实邮箱和防止恶意注,可能需要做一个邮箱验证,此篇教程就是讲解如何用Java实现邮箱验证功能。

主要业务逻辑实现过程:

用户填写完成相关信息后,点击注册,系统先将用户记录保存到数据库表中,其中用户状态为未激活。系统发送一封邮件并通知用户去验证,邮件中包含了唯一标识用户的激活码。用户登录邮箱并点击激活链接,系统接收到激活码。系统根据激活码在数据库中找到相应用户,并将用户状态更改为已激活,最后通知用户激活成功。

项目结构(JavaWeb项目):

UserDao:数据库操作,包括用户注册、激活状态更改。

JDBCUtils:链接数据库工具类。

User:表的POJO。

ActivationServlet:用于接收激活信息。

RegisterServlet:插入用户信息到数据库中,并发送激活邮件

项目运行效果截图:

1 . 用户登陆页面:

2 . 用户点击注册按钮后,系统将用户信息保存到数据库中:

此时用户状态是未激活:

3 . 系统向用户发送激活邮件:

4 . 用户点击激活链接,系统将用户状态改为已激活:

代码没有什么难度,看懂了实现原理就只差复制粘贴了,哈哈哈哈,这里只贴出主要部分代码,全部代码见文末链接。

UserDao:数据库操作,包括用户注册、激活状态更改。

package com.hao.validate.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import com.hao.validate.db.JDBCUtils;import com.hao.validate.pojo.User;public class UserDao {/*** 注册* @param user* @return*/public int insert(User user) {Connection conn = null;PreparedStatement ps = null;int result = 0;try {conn = JDBCUtils.getConnection();String sql = "insert into user(username,password,email,state,code) values(?,?,?,?,?)";ps = conn.prepareStatement(sql);ps.setString(1, user.getUsername());ps.setString(2, user.getPassword());ps.setString(3, user.getEmail());ps.setInt(4, user.getState());ps.setString(5, user.getCode());result = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return result;}/***注册表改为激活状态* @param code* @return*/public int activation(String code) {Connection conn = null;PreparedStatement ps = null;int result = 0;try {conn = JDBCUtils.getConnection();String sql = "update user set state=1 where code=?";ps =conn.prepareStatement(sql);ps.setString(1, code);result = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return result;}}

User表的sql:

create table `user`(id int(11) primary key auto_increment comment 用户id,username varchar(255) not null comment 用户名,email varchar(255) not null comment用户邮箱,password varchar(255) not null comment 用户密码,state int(1) not null default 0 comment 用户激活状态:0表示未激活,1表示激活,code varchar(255) not null comment 激活码)engine=InnoDB default charset=utf8;

ActivationServlet:用于接收激活信息。

package com.hao.validate.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.hao.validate.dao.UserDao;/*** Servlet 用于接收激活信息*/@WebServlet("/ActivationServlet")public class ActivationServlet extends HttpServlet {private static final long serialVersionUID = 1L;public ActivationServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置请求和响应编码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");String code = request.getParameter("code");UserDao userDao = new UserDao();if (userDao.activation(code) > 0) {response.getWriter().append("恭喜您,激活成功!");} else {response.getWriter().append("激活失败,请检查邮箱!");}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

RegisterServlet:插入用户信息到数据库中,并发送激活邮件。

package com.hao.validate.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.hao.jmail.SendEmail;import com.hao.random.StringRandom;import com.hao.validate.dao.UserDao;import com.hao.validate.pojo.User;/*** Servlet 注册 插入用户信息到数据库中,并发送激活邮件*/@WebServlet("/RegisterServlet")public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;public RegisterServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置请求和响应编码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");User user = new User();user.setUsername(request.getParameter("name"));user.setPassword(request.getParameter("pass"));user.setEmail(request.getParameter("email"));user.setCode(StringRandom.getStringRandom(8));//随机激活码user.setState(0);// 初始状态是0 ,0表示未激活System.out.println(user);// User信息插入到数据库中UserDao userDao = new UserDao();if (userDao.insert(user) > 0) {response.getWriter().append("注册成功,请登录邮箱激活账号!");// 发送邮件String mailText = "<html><head></head><body><h1>这是一封激活邮件,激活请点击以下链接</h1><h3><a href=http://localhost:8080/tool/ActivationServlet?code="+ user.getCode() + ">http://localhost:8080/tool/ActivationServlet?code=" + user.getCode()+ "</href></h3></body></html>";SendEmail.Send("发送邮件的邮箱账户", "发送邮件的邮箱密码", user.getEmail(), "备注", "发件人昵称", "主题", mailText);} else {response.getWriter().append("注册失败,请检查相关信息!");}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

本篇教程源码地址:

https://github.com/jiahaoit/tool.git

分类: 源码分享 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录