资讯

展开

Java实现邮箱验证功能

作者:快盘下载 人气:

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

主要业务逻辑实现过程:

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

项目结构(JavaWeb项目):

Java实现邮箱验证功能

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

JDBCUtils:链接数据库工具类。

User:表的POJO。

ActivationServlet:用于接收激活信息。

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

项目运行效果截图

1 . 用户登陆页面:

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

Servlet

此时用户状态是未激活:

Servlet

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

Java

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

SQL

SQL

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

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

加载全部内容

相关教程
猜你喜欢
用户评论
快盘暂不提供评论功能!