Java实现邮箱激活验证

最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用

RegisterValidateService.java

 

  1. package com.app.service.impl;  
  2.   
  3. import java.text.ParseException;  
  4. import java.util.Date;  
  5.   
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.stereotype.Service;  
  8.   
  9. import com.app.dao.UserDao;  
  10. import com.app.tools.MD5Tool;  
  11. import com.app.tools.MD5Util;  
  12. import com.app.tools.SendEmail;  
  13. import com.app.tools.ServiceException;  
  14. import com.code.model.UserModel;  
  15.   
  16.   
  17.   
  18. @Service  
  19. public class RegisterValidateService {  
  20.       
  21.     @Autowired  
  22.     private UserDao userDao;  
  23.       
  24.       
  25.    
  26.     public void processregister(String email){  
  27.         UserModel user=new UserModel();  
  28.         Long as=5480l;  
  29.         user.setId(as);  
  30.         user.setName("xiaoming");  
  31.         user.setPassword("324545");  
  32.         user.setEmail(email);  
  33.         user.setRegisterTime(new Date());  
  34.         user.setStatus(0);  
  35.         ///如果处于安全,可以将激活码处理的更复杂点,这里我稍做简单处理  
  36.         //user.setValidateCode(MD5Tool.MD5Encrypt(email));  
  37.         user.setValidateCode(MD5Util.encode2hex(email));  
  38.           
  39.         userDao.save(user);//保存注册信息  
  40.           
  41.         ///邮件的内容  
  42.         StringBuffer sb=new StringBuffer("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!
    ");  
  43.         sb.append(");  
  44.         sb.append(email);   
  45.         sb.append("&validateCode=");   
  46.         sb.append(user.getValidateCode());  
  47.         sb.append("\">http://localhost:8080/springmvc/user/register?action=activate&email=");   
  48.         sb.append(email);  
  49.         sb.append("&validateCode=");  
  50.         sb.append(user.getValidateCode());  
  51.         sb.append("");  
  52.           
  53.         //发送邮件  
  54.         SendEmail.send(email, sb.toString());  
  55.         System.out.println("发送邮件");  
  56.           
  57.     }  
  58.       
  59.       
  60.       ///传递激活码和email过来  
  61.     public void processActivate(String email , String validateCode)throws ServiceException, ParseException{    
  62.          //数据访问层,通过email获取用户信息  
  63.         UserModel user=userDao.find(email);  
  64.         //验证用户是否存在   
  65.         if(user!=null) {    
  66.             //验证用户激活状态    
  67.             if(user.getStatus()==0) {   
  68.                 ///没激活  
  69.                 Date currentTime = new Date();//获取当前时间    
  70.                 //验证链接是否过期   
  71.                 currentTime.before(user.getRegisterTime());  
  72.                 if(currentTime.before(user.getLastActivateTime())) {    
  73.                     //验证激活码是否正确    
  74.                     if(validateCode.equals(user.getValidateCode())) {    
  75.                         //激活成功, //并更新用户的激活状态,为已激活   
  76.                         System.out.println("==sq==="+user.getStatus());  
  77.                         user.setStatus(1);//把状态改为激活  
  78.                         System.out.println("==sh==="+user.getStatus());  
  79.                         userDao.update(user);  
  80.                     } else {    
  81.                        throw new ServiceException("激活码不正确");    
  82.                     }    
  83.                 } else { throw new ServiceException("激活码已过期!");    
  84.                 }    
  85.             } else {  
  86.                throw new ServiceException("邮箱已激活,请登录!");    
  87.             }    
  88.         } else {  
  89.             throw new ServiceException("该邮箱未注册(邮箱地址不存在)!");    
  90.         }    
  91.             
  92.     }   
  93.   
  94. }  



 

RegisterController.java

 

  1. package com.app.web.controller;  
  2.   
  3. import java.text.ParseException;  
  4.   
  5. import javax.annotation.Resource;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import org.springframework.stereotype.Controller;  
  10. import org.springframework.web.bind.annotation.RequestMapping;  
  11. import org.springframework.web.bind.annotation.RequestMethod;  
  12. import org.springframework.web.servlet.ModelAndView;  
  13.   
  14. import com.app.service.impl.RegisterValidateService;  
  15. import com.app.tools.ServiceException;  
  16.   
  17.   
  18. @Controller  
  19. public class RegisterController {  
  20.       
  21.     @Resource  
  22.     private RegisterValidateService service;  
  23.       
  24.     @RequestMapping(value="/user/register",method={RequestMethod.GET,RequestMethod.POST})  
  25.     public ModelAndView  load(HttpServletRequest request,HttpServletResponse response) throws ParseException{  
  26.         String action = request.getParameter("action");  
  27.         System.out.println("-----r----"+action);  
  28.         ModelAndView mav=new ModelAndView();  
  29.   
  30.         if("register".equals(action)) {  
  31.             //注册  
  32.             String email = request.getParameter("email");  
  33.             service.processregister(email);//发邮箱激活  
  34.             mav.addObject("text","注册成功");  
  35.             mav.setViewName("register/register_success");  
  36.         }   
  37.         else if("activate".equals(action)) {  
  38.             //激活  
  39.             String email = request.getParameter("email");//获取email  
  40.             String validateCode = request.getParameter("validateCode");//激活码  
  41.               
  42.             try {  
  43.                 service.processActivate(email , validateCode);//调用激活方法  
  44.                 mav.setViewName("register/activate_success");  
  45.             } catch (ServiceException e) {  
  46.                 request.setAttribute("message" , e.getMessage());  
  47.                 mav.setViewName("register/activate_failure");  
  48.             }  
  49.               
  50.         }  
  51.         return mav;  
  52.     }  
  53.       
  54.   
  55. }  

 

 

UserDao.java(这里个人没有做入库操作,只是利用集合,做过效果出来0_0)

 

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. package com.app.dao;  
  2.   
  3.   
  4. import java.text.ParseException;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.Date;  
  7. import java.util.HashMap;  
  8.   
  9.   
  10. import org.springframework.stereotype.Repository;  
  11.   
  12. import com.code.model.UserModel;  
  13.   
  14.   
  15. @Repository  
  16. public class UserDao {  
  17.       
  18.    public HashMap map=new HashMap();  
  19.       
  20.     public void save(UserModel user){  
  21.         System.out.println("cicicici");  
  22.         map.put("id", String.valueOf(user.getId()));  
  23.         map.put("email", user.getEmail());  
  24.         map.put("validateCode", user.getValidateCode());  
  25.         SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmss");  
  26.         String time=sdf.format(user.getRegisterTime());  
  27.         map.put("registerTime", time);  
  28.         int status=user.getStatus();  
  29.         map.put("status", String.valueOf(status));  
  30.         map.put("name", user.getName());  
  31.         String t2=sdf.format(user.getLastActivateTime());  
  32.         map.put("activeLastTime", String.valueOf(t2));  
  33.         System.out.println("=======s========="+status);  
  34.           
  35.     }  
  36.       
  37.       
  38.     public void update(UserModel user){  
  39.         map.put("email", user.getEmail());  
  40.         map.put("validateCode", user.getValidateCode());  
  41.         Date time=user.getRegisterTime();  
  42.         map.put("registerTime", String.valueOf(time));  
  43.         int status=user.getStatus();  
  44.         map.put("status", String.valueOf(status));  
  45.         System.out.println("=======st========="+status);  
  46.     }  
  47.       
  48.       
  49.     public UserModel find(String email) throws ParseException{  
  50.         UserModel user=new UserModel();  
  51.         user.setEmail(map.get("email"));  
  52.         user.setName(map.get("name"));  
  53.         SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmss");  
  54.         Date day=sdf.parse(map.get("registerTime"));  
  55.         user.setRegisterTime(day);  
  56.         user.setStatus(Integer.valueOf(map.get("status")));  
  57.         user.setValidateCode(map.get("validateCode"));  
  58.   
  59.         return user;  
  60.     }  
  61.   
  62. }  


UserModel.java

 

 

  1. package com.code.model;  
  2.   
  3. import java.beans.Transient;  
  4. import java.util.Calendar;  
  5. import java.util.Date;  
  6.   
  7.   
  8. public class UserModel {  
  9.     private Long id;  
  10.     private String name;  
  11.     private String password;  
  12.     private String email;//注册账号  
  13.     private int status=0;//激活状态  
  14.     private String validateCode;//激活码  
  15.     private Date  registerTime;//注册时间  
  16.       
  17.          
  18.     /////////////////  
  19.   
  20.     public Long getId() {  
  21.         return id;  
  22.     }  
  23.       
  24.     public void setId(Long id) {  
  25.         this.id = id;  
  26.     }  
  27.       
  28.     public String getName() {  
  29.         return name;  
  30.     }  
  31.       
  32.     public void setName(String name) {  
  33.         this.name = name;  
  34.     }  
  35.       
  36.     public String getPassword() {  
  37.         return password;  
  38.     }  
  39.       
  40.     public void setPassword(String password) {  
  41.         this.password = password;  
  42.     }  
  43.       
  44.     public String getEmail() {  
  45.         return email;  
  46.     }  
  47.       
  48.     public void setEmail(String email) {  
  49.         this.email = email;  
  50.     }  
  51.       
  52.     public int getStatus() {  
  53.         return status;  
  54.     }  
  55.       
  56.     public void setStatus(int status) {  
  57.         this.status = status;  
  58.     }  
  59.       
  60.     public String getValidateCode() {  
  61.         return validateCode;  
  62.     }  
  63.       
  64.     public void setValidateCode(String validateCode) {  
  65.         this.validateCode = validateCode;  
  66.     }  
  67.       
  68.     public Date getRegisterTime() {  
  69.         return registerTime;  
  70.     }  
  71.       
  72.     public void setRegisterTime(Date registerTime) {  
  73.         this.registerTime = registerTime;  
  74.     }  
  75.   
  76.     /////////////////////////  
  77.     @Transient  
  78.     public Date getLastActivateTime() {  
  79.         Calendar cl = Calendar.getInstance();  
  80.         cl.setTime(registerTime);  
  81.         cl.add(Calendar.DATE , 2);  
  82.           
  83.         return cl.getTime();  
  84.     }  
  85.       
  86. }  

 

posted @ 2016-05-28 15:31  旧巷里的旧少年  阅读(361)  评论(0编辑  收藏  举报