Home  >  Article  >  Java  >  How does Java implement email activation when users register?

How does Java implement email activation when users register?

黄舟
黄舟Original
2017-07-17 09:54:231591browse

Java implementation example of sending activation emails and activation during registration

The registration email activation function that was recently separated from the project, sort it out for easy use next time

1.RegisterController.java

package com.app.web.controller;
import java.text.ParseException;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.app.service.impl.RegisterValidateService;
import com.app.tools.ServiceException;
 
@Controller
public class RegisterController {
 
  @Resource
  private RegisterValidateService service;
 
  @RequestMapping(value="/user/register",method={RequestMethod.GET,RequestMethod.POST})
  public ModelAndView load(HttpServletRequest request,HttpServletResponse response) throws ParseException{
    String action = request.getParameter("action");
    ModelAndView mav=new ModelAndView();
    if("register".equals(action)) {
      //注册
      String email = request.getParameter("email");
      service.processregister(email);//发邮箱激活
      mav.addObject("text","注册成功");
      mav.setViewName("register/register_success");
    }
    else if("activate".equals(action)) {
      //激活
      String email = request.getParameter("email");//获取email
      String validateCode = request.getParameter("validateCode");//激活码
      try {
        service.processActivate(email , validateCode);//调用激活方法
        mav.setViewName("register/activate_success");
      } catch (ServiceException e) {
        request.setAttribute("message" , e.getMessage());
        mav.setViewName("register/activate_failure");
      }
    }
    return mav;
  }
  
}

2.RegisterValidateService.java

package com.app.service.impl;
import java.text.ParseException;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.app.dao.UserDao;
import com.app.tools.MD5Tool;
import com.app.tools.MD5Util;
import com.app.tools.SendEmail;
import com.app.tools.ServiceException;
import com.code.model.UserModel;
 
@Service
public class RegisterValidateService {
 
  @Autowired
  private UserDao userDao;
 
  /**
   * 处理注册
  */
  public void processregister(String email){
    UserModel user=new UserModel();
    Long as=5480l;
    user.setId(as);
    user.setName("xiaoming");
    user.setPassword("324545");
    user.setEmail(email);
    user.setRegisterTime(new Date());
    user.setStatus(0);
    ///如果处于安全,可以将激活码处理的更复杂点,这里我稍做简单处理
    //user.setValidateCode(MD5Tool.MD5Encrypt(email));
    user.setValidateCode(MD5Util.encode2hex(email));
 
    userDao.save(user);//保存注册信息
 
    ///邮件的内容
    StringBuffer sb=new StringBuffer("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");
    sb.append("<a href=\"http://localhost:8080/springmvc/user/register?action=activate&email=");
    sb.append(email);
    sb.append("&validateCode=");
    sb.append(user.getValidateCode());
    sb.append("\">http://localhost:8080/springmvc/user/register?action=activate&email=");
    sb.append(email);
    sb.append("&validateCode=");
    sb.append(user.getValidateCode());
    sb.append("</a>");
 
    //发送邮件
    SendEmail.send(email, sb.toString());
    System.out.println("发送邮件");
 
  }
 
  /**
   * 处理激活
   * @throws ParseException
   */
   ///传递激活码和email过来
  public void processActivate(String email , String validateCode)throws ServiceException, ParseException{ 
     //数据访问层,通过email获取用户信息
    UserModel user=userDao.find(email);
    //验证用户是否存在
    if(user!=null) { 
      //验证用户激活状态 
      if(user.getStatus()==0) {
        ///没激活
        Date currentTime = new Date();//获取当前时间 
        //验证链接是否过期
        currentTime.before(user.getRegisterTime());
        if(currentTime.before(user.getLastActivateTime())) { 
          //验证激活码是否正确 
          if(validateCode.equals(user.getValidateCode())) { 
            //激活成功, //并更新用户的激活状态,为已激活
            System.out.println("==sq==="+user.getStatus());
            user.setStatus(1);//把状态改为激活
            System.out.println("==sh==="+user.getStatus());
            userDao.update(user);
          } else { 
            throw new ServiceException("激活码不正确"); 
          } 
        } else { throw new ServiceException("激活码已过期!"); 
        } 
      } else {
        throw new ServiceException("邮箱已激活,请登录!"); 
      } 
    } else {
      throw new ServiceException("该邮箱未注册(邮箱地址不存在)!"); 
    } 
 
  }
}
  

3.UserModel.java

package com.code.model;
import java.beans.Transient;
import java.util.Calendar;
import java.util.Date;
 
public class UserModel {
  private Long id;
 private String name;
 private String password;
 private String email;//注册账号
 private int status=0;//激活状态
 private String validateCode;//激活码
 private Date registerTime;//注册时间
 
   
  /////////////////
  public Long getId() {
    return id;
  }
 
  public void setId(Long id) {
    this.id = id;
  }
 
  public String getName() {
    return name;
  }
 
  public void setName(String name) {
    this.name = name;
  }
 
  public String getPassword() {
    return password;
  }
 
  public void setPassword(String password) {
    this.password = password;
  }
 
  public String getEmail() {
    return email;
  }
 
  public void setEmail(String email) {
    this.email = email;
  }
 
  public int getStatus() {
    return status;
  }
 
  public void setStatus(int status) {
    this.status = status;
  }
 
  public String getValidateCode() {
    return validateCode;
  }
 
  public void setValidateCode(String validateCode) {
    this.validateCode = validateCode;
  }
 
  public Date getRegisterTime() {
    return registerTime;
  }
 
  public void setRegisterTime(Date registerTime) {
    this.registerTime = registerTime;
  }
  /////////////////////////
  @Transient
  public Date getLastActivateTime() {
    Calendar cl = Calendar.getInstance();
    cl.setTime(registerTime);
    cl.add(Calendar.DATE , 2);
 
    return cl.getTime();
  }
 
}

4.SendEmail.java

package com.app.tools;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
public class SendEmail {
 
  public static final String HOST = "smtp.163.com";
  public static final String PROTOCOL = "smtp"; 
  public static final int PORT = 25;
  public static final String FROM = "xxxxx@xx.com";//发件人的email
  public static final String PWD = "123456";//发件人密码
 
  /**
   * 获取Session
   * @return
   */
  private static Session getSession() {
    Properties props = new Properties();
    props.put("mail.smtp.host", HOST);//设置服务器地址
    props.put("mail.store.protocol" , PROTOCOL);//设置协议
    props.put("mail.smtp.port", PORT);//设置端口
    props.put("mail.smtp.auth" , true);
 
    Authenticator authenticator = new Authenticator() {
      @Override
      protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(FROM, PWD);
      }
 
    };
    Session session = Session.getDefaultInstance(props , authenticator);
 
    return session;
  }
 
  public static void send(String toEmail , String content) {
    Session session = getSession();
    try {
      System.out.println("--send--"+content);
      // Instantiate a message
      Message msg = new MimeMessage(session);
 
      //Set message attributes
      msg.setFrom(new InternetAddress(FROM));
      InternetAddress[] address = {new InternetAddress(toEmail)};
      msg.setRecipients(Message.RecipientType.TO, address);
      msg.setSubject("账号激活邮件");
      msg.setSentDate(new Date());
      msg.setContent(content , "text/html;charset=utf-8");
 
      //Send the message
      Transport.send(msg);
    }
    catch (MessagingException mex) {
      mex.printStackTrace();
    }
  }
}

5.jsp page

registerEmailValidae.jsp

<h2>注册激活</h2>
<form action="user/register?action=register" method="post">
   Email:<input type="text" id="email" name="email" value="" >
   <input type="submit" value="提交">
</form>

register_success.jsp

<body>
  恭喜你注册成功!请到注册的邮箱点击链接激活!
 </body>

activate_success.jsp:

<body>
  账号激活成功,点击这里去登录!
 </body>

activate_failure.jsp:

<body>
  激活失败!错误信息:${message }
</body>

The above is the detailed content of How does Java implement email activation when users register?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn