java中实现注册时Email邮件激活验证

思路:

数据库需要增加两个字段,1.是否激活. 2.激活码。
1.在注册完成的同时,生成一个随机数(例如UUID),保存该随机数到激活码字段,同时设置为未激活。
2.把激活地址URL发送邮件给用户填写的邮箱,URL构成为,处理地址+参数=激活码。
3.用户点击该URL,处理该激活码是否和数据库中的相同,相同则设置该用户激活,同时删除激活码字段。 否则返回错误页面
至于发邮件可以用jemail等第三方J包。

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;

/**
*
* @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代码

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)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值