SSH邮箱验证与激活

时间:2023-03-08 17:32:20

下面是我写的email验证和激活:

自己瞎写的,能用,不喜欢勿喷

    action中regist方法中代码

 /**
*
* 发送邮件的方法
*/
StringBuffer sb=new StringBuffer("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!<br>");
sb.append("http://localhost:**********action?email=");
sb.append(user.getEmail());
sb.append("&code=");
sb.append(user.getCode());
sb.append(""); //发送邮件
SendEmail.send(user.getEmail(), sb.toString());

    action中处理激活的方法

 /**
* 处理激活
*/
public String active() throws ServiceException, ParseException {
//获得原生态rquest
HttpServletRequest request = (HttpServletRequest) ActionContext
.getContext()
.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
service.processActivate(request.getParameter("email"), request.getParameter("code"));
this.addActionMessage("激活成功,请点击去登录");
return "succ";
}

    service层处理激活的方法(我的代码激活清空了激活码,你也可以选择不清空激活码)

 /**
* 处理激活
* @throws ParseException
*/
///传递激活码和email过来
public void processActivate(String email , String code)throws ServiceException, ParseException{
//数据访问层,通过email获取用户信息
List<User> list=dao.findByEmail(email);
User users=list.get(0);
//验证用户是否存在
if(users!=null) {
//验证用户激活状态
if(users.getState()==0) {
///没激活
Date currentTime = new Date();//获取当前时间
//验证链接是否过期
currentTime.before(users.getRegisterTime());
if(currentTime.before(users.getLastActivateTime())) {
//验证激活码是否正确
if(code.equals(users.getCode())) {
//激活成功, //并更新用户的激活状态,为已激活
users.setState(1);//把状态改为激活
users.setCode("");//把激活码清空
dao.update(users);
} else {
throw new ServiceException("激活码不正确");
}
} else { throw new ServiceException("激活码已过期!");
}
} else {
throw new ServiceException("邮箱已激活,请登录!");
}
} else {
throw new ServiceException("该邮箱未注册(邮箱地址不存在)!");
} }

    Service层中的涉及到的update方法,下面的代码写在dao层,service层中还有一个findByEmail()方法我就不贴出来了

 @Override
public void update(User user)
{
Session session = sessionFactory.getCurrentSession();
session.update(user);
}