基于JavaWeb的旅游项目--邮箱激活功能




1、激活功能—界面展示

Alt
在这里插入图片描述
在这里插入图片描述

2、Uuid介绍

(1)什么是Uuid

  • UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的重要部分。
  • 简而言之
    全球唯一的,不会重复的 固定长度的随机字符串
    f8d59d0168af4602a9b754663e2cd9ef
    67f95f0b436947619ac14a9f2a7ce6bf
    在这里插入图片描述

(2)Uuid的组成

   按UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。
在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),
其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
UUID的应用?

(3)Uuid的使用

  • UuidUtil.java(src\main\java\util)
/**
 * 产生UUID随机字符串工具类
 */
public final class UuidUtil {
    
    
	private UuidUtil(){
    
    }
	public static String getUuid(){
    
    
		return UUID.randomUUID().toString().replace("-","");
	}

}
  • 测试类
    UuidUtilTest.java(src\test\java\util)
public class UuidUtilTest {
    
    

    @Test
    public void getUuid() {
    
    
        for (int i = 0; i < 10; i++) {
    
    
            String code  = UuidUtil.getUuid();
            System.out.println(code);
        }

    }
}

3、后台代码

(1)设置状态和激活码

  • UserService.java(src\mian\java\service)
			user.setStatus('N');//未激活
            String activeCode = UuidUtil.getUuid();
            user.setCode(activeCode);//激活
            userDao.save(user);
            MySessionUtils2.commitAndClose();

在这里插入图片描述

(2)测试激活

  • TestUserService.java(src\test\java\service)
@Test
    public void test04() {
    
    
        UserService userService = new UserService();
        //根据 code -> status 改为Y
        int code = userService.active("bb26f0d05ea745c5986bc18ff7b4cef9");
        System.out.println(code);
    }
}

(3)实现激活

  • UserService.java(src\main\java\service)
  //激活邮箱
    public int active(String activeCode) {
    
    
        UserDao userDao = MySessionUtils2.getMapper(UserDao.class);
        int code =  userDao.updateStatus(activeCode); //1 表示成功
        MySessionUtils2.commitAndClose();
        return code;
    }
  • UserDao.java(src\main\java\dao)
//update tab_user set status ='Y' where code = 'bb26f0d05ea745c5986bc18ff7b4cef9';
    int updateStatus(String activeCode);
  • UserDao.xml(src\main\resources)
<update id="updateStatus" parameterType="string" >
        update tab_user set status ='Y' where code = #{
    
    code};
    </update>
  • 测试dao方法
    TestUserService(src\test\java\service)
@Test
    public void test04() {
    
    
        UserService userService = new UserService();
        //根据 code -> status 改为Y
        int code = userService.active("bb26f0d05ea745c5986bc18ff7b4cef9");
        System.out.println(code);
    }

(4)完善注册功能

  • UserService.java(src\main\java\service)
public int register(User user) {
    
    
        UserDao userDao = MySessionUtils2.getMapper(UserDao.class);
        //判断 用户的账号是否存在
        User user2 = userDao.findByUserName(user.getUsername());
        //不存在,调用保存 返回 1
        if(user2 == null){
    
    
            user.setStatus('N');//未激活
            String activeCode = UuidUtil.getUuid();
            user.setCode(activeCode);//激活
            userDao.save(user);
            MySessionUtils2.commitAndClose();

            //参1 收件人
            //参2 内容
            //参3 标题
            MailUtils.sendMail(user.getEmail(),"<a href='http://localhost:8080/lvyou_war_exploded/activeServlet?activeCode="+activeCode+"'>点击激活途牛旅游账户</a>","激活账户");
            return 1;
        }else{
    
    
            //存在,返回-1
            return -1;
        }

    }
        //激活邮箱
    public int active(String activeCode) {
    
    
        UserDao userDao = MySessionUtils2.getMapper(UserDao.class);
        int code =  userDao.updateStatus(activeCode); //1 表示成功
        MySessionUtils2.commitAndClose();
        return code;
    }

4、邮箱激活方式

  • 打开邮箱–>设置–>账户
    在这里插入图片描述
  • 找到POP3/IMAP…–>将前两项激活–>通过手机会收到授权码–>复制授权码
    在这里插入图片描述

5、前台代码

(1) ActiveServlet.java

(src\main\java\web\servlet)

@WebServlet("/activeServlet")
public class ActiveServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取参数  activeCode  //lvyou/activeServlet?activeCode=bb26f0d05ea745c5986bc18ff7b4cef9
        String activeCode = request.getParameter("activeCode");
        //处理参数
        UserService userService = new UserService();
        int code = userService.active(activeCode);
        System.out.println(activeCode);
        //响应给浏览器
        String msg = "";
        if(code==1){
    
    
            msg="激活成功可以使用";
        }else{
    
    
            msg="激活失败";
        }
        request.setAttribute("msg",msg);
        request.getRequestDispatcher("message.jsp").forward(request,response);
    }
}

(2)message.jsp

(src\main\webapps)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${
    
    msg}您已激活,请返回<a href="login.jsp">登录</a>
</body>
</html>

(3)MailUtils.java

  • 将刚刚复制的授权码写在下方
    在这里插入图片描述

(src\main\java\util)

/**
 * 发邮件工具类
 */
public final class MailUtils {
    
    
    private static final String USER = "[email protected]"; // 发件人称号,同邮箱地址
    private static final String PASSWORD = "aghemvlpcgpubjaa"; // 如果是qq邮箱可以使户端授权码,或者登录密码

    /**
     *
     * @param to 收件人邮箱
     * @param text 邮件正文
     * @param title 标题
     */
    /* 发送验证信息的邮件 */
    public static boolean sendMail(String to, String text, String title){
    
    
        try {
    
    
            final Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.host", "smtp.qq.com");

            // 发件人的账号
            props.put("mail.user", USER);
            //发件人的密码
            props.put("mail.password", PASSWORD);

            // 构建授权信息,用于进行SMTP进行身份验证
            Authenticator authenticator = new Authenticator() {
    
    
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
    
    
                    // 用户名、密码
                    String userName = props.getProperty("mail.user");
                    String password = props.getProperty("mail.password");
                    return new PasswordAuthentication(userName, password);
                }
            };
            // 使用环境属性和授权信息,创建邮件会话
            Session mailSession = Session.getInstance(props, authenticator);
            // 创建邮件消息
            MimeMessage message = new MimeMessage(mailSession);
            // 设置发件人
            String username = props.getProperty("mail.user");
            InternetAddress form = new InternetAddress(username);
            message.setFrom(form);

            // 设置收件人
            InternetAddress toAddress = new InternetAddress(to);
            message.setRecipient(Message.RecipientType.TO, toAddress);

            // 设置邮件标题
            message.setSubject(title);

            // 设置邮件的内容体
            message.setContent(text, "text/html;charset=UTF-8");
            // 发送邮件
            Transport.send(message);
            return true;
        }catch (Exception e){
    
    
            e.printStackTrace();
        }
        return false;
    }


}

(4)MailUtilsTest .java

(src\test\java\util)

public class MailUtilsTest {
    
    

    @Test
    public void sendMail() {
    
    
        //参1 收件人
        //参2 内容
        //参3 标题
        MailUtils.sendMail("[email protected]","<a href='http://localhost:8080/lvyou_war_exploded/activeServlet?activeCode=f43812f68c794732943ffe678e9a4685'>点击激活途牛旅游账户</a>","激活账户");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41209886/article/details/108942933