源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Java注册邮箱激活验证实现代码

  • 时间:2021-05-30 08:09 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java注册邮箱激活验证实现代码
最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 RegisterValidateService.java
[u]复制代码[/u] 代码如下:
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; /**  *  * @author Qixuan.Chen  */ @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("该邮箱未注册(邮箱地址不存在)!");          }      } }
RegisterController.java
[u]复制代码[/u] 代码如下:
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");         System.out.println("-----r----"+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;     }     }
UserDao.java(这里个人没有做入库操作,只是利用集合,做过效果出来0_0)
[u]复制代码[/u] 代码如下:
package com.app.dao; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import org.springframework.stereotype.Repository; import com.code.model.UserModel; /**  *  * @author Qixuan.Chen  */ @Repository public class UserDao {    public HashMap<String, String> map=new HashMap<String, String>();     /**      * @保存注册信息      *  private Long id;         private String name;         private String password;         private String email;//注册账号         private int status;//激活状态         private String validateCode;//激活码         private Date  registerTime;//注册时间      */     public void save(UserModel user){         System.out.println("cicicici");         map.put("id", String.valueOf(user.getId()));         map.put("email", user.getEmail());         map.put("validateCode", user.getValidateCode());         SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmss");         String time=sdf.format(user.getRegisterTime());         map.put("registerTime", time);         int status=user.getStatus();         map.put("status", String.valueOf(status));         map.put("name", user.getName());         String t2=sdf.format(user.getLastActivateTime());         map.put("activeLastTime", String.valueOf(t2));         System.out.println("=======s========="+status);     }     /**      * @更新 user      */     public void update(UserModel user){         map.put("email", user.getEmail());         map.put("validateCode", user.getValidateCode());         Date time=user.getRegisterTime();         map.put("registerTime", String.valueOf(time));         int status=user.getStatus();         map.put("status", String.valueOf(status));         System.out.println("=======st========="+status);     }     /**      * @throws ParseException      * @查找信息      */     public UserModel find(String email) throws ParseException{         UserModel user=new UserModel();         user.setEmail(map.get("email"));         user.setName(map.get("name"));         SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmss");         Date day=sdf.parse(map.get("registerTime"));         user.setRegisterTime(day);         user.setStatus(Integer.valueOf(map.get("status")));         user.setValidateCode(map.get("validateCode"));         return user;     } }
UserModel.java
[u]复制代码[/u] 代码如下:
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();     } }
SendEmail.java
[u]复制代码[/u] 代码如下:
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; /**  *  * @author Qixuan.Chen  */ 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();         }     } }
MD5Util.java
[u]复制代码[/u] 代码如下:
package com.app.tools; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util {  /**   * 将源字符串使用MD5加密为字节数组   * @param source   * @return   */  public static byte[] encode2bytes(String source) {   byte[] result = null;   try {    MessageDigest md = MessageDigest.getInstance("MD5");    md.reset();    md.update(source.getBytes("UTF-8"));    result = md.digest();   } catch (NoSuchAlgorithmException e) {    e.printStackTrace();   } catch (UnsupportedEncodingException e) {    e.printStackTrace();   }   return result;  }  /**   * 将源字符串使用MD5加密为32位16进制数   * @param source   * @return   */  public static String encode2hex(String source) {   byte[] data = encode2bytes(source);   StringBuffer hexString = new StringBuffer();   for (int i = 0; i < data.length; i++) {    String hex = Integer.toHexString(0xff & data[i]);    if (hex.length() == 1) {     hexString.append('0');    }    hexString.append(hex);   }   return hexString.toString();  }  /**   * 验证字符串是否匹配   * @param unknown 待验证的字符串   * @param okHex 使用MD5加密过的16进制字符串   * @return 匹配返回true,不匹配返回false   */  public static boolean validate(String unknown , String okHex) {   return okHex.equals(encode2hex(unknown));  } }
ServiceException.java
[u]复制代码[/u] 代码如下:
package com.app.tools; public class ServiceException extends Exception {  private static final long serialVersionUID = -1708015121235851228L;  public ServiceException(String message) {   super(message);  } }
jsp页面 registerEmailValidae.jsp
[u]复制代码[/u] 代码如下:
   <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
[u]复制代码[/u] 代码如下:
  <body>     恭喜你注册成功!请到注册的邮箱点击链接激活!   </body>
activate_success.jsp:
[u]复制代码[/u] 代码如下:
 <body>     账号激活成功,点击这里去登录!   </body> activate_failure.jsp: <body>     激活失败!错误信息:${message }   </body>
效果图: 1 [img]http://files.jb51.net/file_images/article/201312/20131227154957234.jpg[/img] 2 [img]http://files.jb51.net/file_images/article/201312/20131227155045112.jpg[/img] 3 [img]http://files.jb51.net/file_images/article/201312/20131227155123799.jpg[/img] 4 [img]http://files.jb51.net/file_images/article/201312/20131227155201681.jpg[/img] 5 [img]http://files.jb51.net/file_images/article/201312/20131227155227580.jpg[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部