用户注册后是如何进行激活的,为什么需要激活

问题:

平常我们注册后,往往需要提示我们需要打开邮箱激活账号,那么激活账号是怎么进行操作的呢?激活有什么意义?为什么需要激活呢?

分析:

1.对用户客户端而言,激活是操作了数据库的某一状态,使账号处于开放状态,获得使用权。 也是对身份一种核查,绑定了你的邮箱,方便通知你,或者密码找回等操作。
2.对服务器而言,防止了机器注册(大量生产无意义的注册),根据你的CPU和MAC地址生成一个激活码,确保了唯一性和真实性,从而减轻了服务器的压力。
对于游戏或者软件,可以用于购买使用权(激活码)来盈利,限制使用人数,保障服务器运行等。

在java中,邮箱激活的其中一种用法事例:

(就是提交用户注册数据后,业务逻辑层会生成激活码,和默认的未激活状态,然后发送一个链接到客户的邮箱,用户点击后,携带激活码到web层-service层-dao层,最后改变了激活默认状态N为Y)

在业务逻辑层,除了用户提交的数据,往往还需要补全一些信息,确保数据的完整性,如下的激活状态,激活码,对用户密码进行加密防止管理员泄密等。
在这里插入图片描述
在上面前端提交的数据和下面数据库的对比,提交数据不全面
(数据库的表名字为tab_user)
在这里插入图片描述
所以需要在业务逻辑层(service层)补充数据,确保数据完整性。
(UuidUtil工具类在最后,生成激活码的算法代码)
在这里插入图片描述
然后在dao层写上相对应的语句,添加用户
在这里插入图片描述
数据库添加成功后如下(数据信息没有写严格的代码限制内容,如手机号是英文):
在这里插入图片描述

完善完数据后,需要用户登录邮箱去进行激活 在业务逻辑层会发送一条Email(向用户发送一个链接,链接带有用户激活码到指定的邮箱),当用户登录邮箱,点击用户激活,会对邮箱进行激活
格式:http://www.xx.com(处理请求的域名)/xxxServle?action=active&code=active&code=激活码
(service层,MailUtil工具类在下文中)
在这里插入图片描述
用户登录邮箱后打开邮箱点解这里的用户激活,就会发送请求并携带code激活码到userServlet
在这里插入图片描述
Servlet层
在这里插入图片描述
在这里插入图片描述

业务层:
在这里插入图片描述

dao层(数据库表名字为tab_user)
在这里插入图片描述
数据库中激活状态由N变为Y,然后只需要用户登录时,提交请求的时候判断status是否为Y,就可以决定用户是否有使用权了
在这里插入图片描述

MailUtil工具类

public class MailUtil {
    /**
     * 发送邮件
     * 参数一:发送邮件给谁
     * 参数二:发送邮件的内容
     */
    public static void sendMail(String toEmail, String emailMsg) throws Exception {
        //1_创建Java程序与163邮件服务器的连接对象
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.163.com");//这里配置发送邮件服务器地址,由于发件人的邮箱是163账号,所以这里配置163发件服务器(如果 是QQ可以百度搜索找到相对应的发件服务器)
        props.put("mail.smtp.auth", "true");
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
            //第一个"xxx"为登录账号,第二个"xxx"为登录授权码(如下图)
                return new PasswordAuthentication("[email protected]", "xxx");
            }
        };
        //Java对象和163的一个会话对象
        Session session = Session.getInstance(props, auth);
        //2_创建一封邮件
        Message message = new MimeMessage(session);
        //设置发件人邮箱
        message.setFrom(new InternetAddress("[email protected]"));
        //设置收件人
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(toEmail));
        //设置邮件主题
        message.setSubject("用户激活");
        //邮件内容
        message.setContent(emailMsg, "text/html;charset=UTF-8");
        //3_发送邮件
        Transport.send(message);
    }

获取设置授权码:
在这里插入图片描述
在这里插入图片描述

UuidUtil工具类

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

在数据库使用select UUID(),发现每次生成的uuid都不一样,而且有-分割开来,所以 上面的return
UUID.randomUUID().toString().replace("-","");语句能使我们获得一串36位数字的字符串激活码
在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42691149/article/details/82963344