Fork me on GitHub

Java自学之路之激活实现

1
2
3
4
《腾讯背水一战》拼凑观点,找一堆真假参半的材料来论证,
这种写作手法让人哭笑不得。说别人收割流量,这种文章才
是典型的流量收割,众生为韭菜。
--------腾讯公关总监张军

1.激活流程

​ 用户提交注册表单以后(数据库添加一条数据,state=0)—–》后台向用户注册的邮箱发送激活链接(附上activeCode)—–》用户点击链接激活(state =1 )

2.技术实现

1.用户提交表单后,调用UserServlet的register方法去处理表单,如果用户注册成功,向用户发送激活邮件,跳转到注册成功页面;如果注册失败,返回失败页面。
//设置激活码
String activeCode = CommonsUtils.getUUID();
user.setCode(activeCode);
boolean registerSuccess = userService.register(user);
//是否注册成功
  if(registerSuccess){
  //发送激活邮件
    String emailMsg = "恭喜您注册成功,请点击下面的连接进行激活账户"
            + "<a href='http://127.0.0.1:8080/Shop/active?activeCode="+activeCode+"'>"
                    + "http://127.0.0.1:8080/Shop/active?activeCode="+activeCode+"</a>";
    try {
        MailUtils.sendMail(user.getEmail(), emailMsg);
    } catch (AddressException e) {
        e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    }
  //跳转到注册成功页面
    res.sendRedirect(req.getContextPath()+"/registerSuccess.jsp");
  }else{
    res.sendRedirect(req.getContextPath()+"/registerFail.jsp");
  }
2.激活邮件中附带activeCode,唯一确定标识,方便判断修改哪个用户的state
String activeCode = request.getParameter("activeCode");
UserService userService = new UserService();
userService.active(activeCode);
response.sendRedirect(request.getContextPath()+"/login.jsp");
3.创建ActiveServlet去处理激活操作,定义active(activeCode)方法,调用service,service调用dao去处理。
QueryRunner queryRunner = new QueryRunner(DataSourceUtils.getDataSource());
//UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
String sql = "update user set state= ? where code = ?";
queryRunner.update(sql, 1,activeCode);

3.技术细节:

  • 在创建用户表的时候,切记添加code和state两个字段,code用来标识用户,state用来判断用户现在的激活状态。

  • 操作邮件时,需要借助邮件工具类。特别是对于发送qq邮件,需要添加SSL

    Properties props = new Properties();

    //开启ssl加密,如果没有ssl加密,会报530错误
    MailSSLSocketFactory sf = null;
    try {
        sf = new MailSSLSocketFactory();
    } catch (GeneralSecurityException e) {
        e.printStackTrace();
    }
    sf.setTrustAllHosts(true);
    props.put("mail.smtp.ssl.enable", "true");
    props.setProperty("mail.transport.protocol", "SMTP");
    props.setProperty("mail.host", "smtp.qq.com");
    props.setProperty("mail.smtp.auth", "true");// 指定验证为true
    
  • 用户激活的本质是在数据库中将state字段从0变为1

$\textcolor{OrangeRed}{结尾彩蛋,附上程序员私藏壁纸:}$

Hello World

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!