前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java实现邮箱验证功能

Java实现邮箱验证功能

作者头像
浩Coding
发布2019-07-03 14:31:13
5.8K0
发布2019-07-03 14:31:13
举报
文章被收录于专栏:浩Coding

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

主要业务逻辑实现过程:

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

项目结构(JavaWeb项目):

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

JDBCUtils:链接数据库工具类。

User:表的POJO。

ActivationServlet:用于接收激活信息。

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

项目运行效果截图:

1 . 用户登陆页面:

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

此时用户状态是未激活:

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

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

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

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:用于接收激活信息。

代码语言:javascript
复制
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:插入用户信息到数据库中,并发送激活邮件。

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩Coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档