注册邮箱验证激活技术

package com.yc.wowo.servlets;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.yc.wowo.dao.DBHelper;
import com.yc.wowo.utils.SendEmail;

/**
 * Servlet implementation class TestServlet
 */
public class TestServlet extends BasicServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String op=request.getParameter("op");
        if(op!=null&&!"".equals(op)){
            if("reg".equals(op)){
                regOP(request,response);
            }
        }
    }

    private void regOP(HttpServletRequest request, HttpServletResponse response) {
        DBHelper db=new DBHelper();
        
        String email=request.getParameter("email");
        String pwd=request.getParameter("pwd");
        //创建激活码
        Calendar c=Calendar.getInstance();
        long time=c.getTimeInMillis();
        String token=email+pwd+time;
         //过期时间为24小时后  
//      int token_exptime=(int)(time+1000*60*60*24);  
        String tokenexptime=(time+1000*120)+"";  
        String id=UUID.randomUUID().toString();  
        System.out.println(id);
        String sql="insert into tb_user(id,username,pwd,token,tokenexptime,regtime,status) values (?,?,?,?,?,sysdate,0)";  
        System.out.println(sql);
       
        List<Object> params=new ArrayList<Object>();  
        params.add(id);  
        params.add(email);  
        params.add(pwd);  
        params.add(token);  
        params.add(tokenexptime);  //这里测试是用的20秒  
        int r=db.doUpdate(sql, params);
        if(r>0){
            //发送邮件
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
            
            StringBuffer sb=new StringBuffer("<div style=\"width:660px;overflow:hidden;border-bottom:1px solid #bdbdbe;\"><div style=\"height:52px;overflow:hidden;border:1px solid #464c51;background:#353b3f url(http://www.lofter.com/rsc/img/email/hdbg.png);\"><a href=\"http://www.lofter.com?mail=qbclickbynoticemail_20120626_01\" target=\"_blank\" style=\"display:block;width:144px;height:34px;margin:10px 0 0 20px;overflow:hidden;text-indent:-2000px;background:url(http://www.lofter.com/rsc/img/email/logo.png) no-repeat;\">LOFTER</a></div>"+"<div style=\"padding:24px 20px;\">您好,"+email+"<br/><br/>LOFTER是一款\"专注兴趣、分享创作\"的轻博客产品,旨在为\"热爱记录生活、追求时尚品质、崇尚自由空间\"的你,打造一个全新而定展示平台!<br/><br/>请点击下面链接激活账号,24小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");  
            sb.append("<a href=\"http://localhost:8080/wowo/EmailActivateCheckServlet?op=activate&id=");  
            sb.append(id);  
            sb.append("&token=");  
            sb.append(token);  
            sb.append("\">http://localhost:8080/wowo/EmailActivateCheckServlet?op=activate&id=");  
            sb.append(id);  
            sb.append("&token=");  
            sb.append(token);  
            sb.append("</a>"+"<br/>如果以上链接无法点击,请把上面网页地址复制到浏览器地址栏中打开<br/><br/><br/>LOFTER,专注兴趣,分享创作<br/>"+sdf.format(new Date())+ "</div></div>" );  
 
            //发送邮件  
            SendEmail.send(email, sb.toString());  
            
        }
        try {
            response.sendRedirect("DoEmailLoginServlet?op=emaillogin&email="+email+"&pwd="+pwd);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        
    }
}

package com.yc.wowo.utils;

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 = "zyt1227133794@163.com";//发件人的email  
    public static final String PWD = "zyt0818123";//发件人密码  
      
 
    /**
     * 获取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();  
        }  
    }  
 
}  

package com.yc.wowo.servlets;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.yc.wowo.dao.DBHelper;
import com.yc.wowo.entities.User;

/**
 * Servlet implementation class EmailActivateCheckServlet
 */
public class EmailActivateCheckServlet extends BasicServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        // 取出op  
                String op = request.getParameter("op");
                System.out.println(op);
                // 判断op是什么,调用不同的方法做处理  
                try {  
                    if (op != null && !"".equals(op)) {  
                        if( "activate".equals(op)){  
                            activateOP(request,response);  
                        }  
                    } else {  
 
                    }  
                } catch (Exception e) {  
                    e.printStackTrace();  
                    response.sendRedirect("common/500.jsp");  
                }  
    }  
 
    private void activateOP(HttpServletRequest request,  
            HttpServletResponse response) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, Exception {  
        //获取参数token的值,即激活识别码。  
        //将它与数据表中的用户信息进行查询对比,如果有相应的数据集,判断是否过期,如果在有效期内则将对应的用户表中字段status设置1,即已激活,这样就完成了激活功能。  
          
        String id=request.getParameter("id");  
        String token=request.getParameter("token");  
        Calendar c = Calendar.getInstance();  
        //现在的时间(单位:毫秒)  
        long curtime = c.getTimeInMillis();  
          
        String sql="select id,tokenexptime,token,username,pwd from tb_user where status=0 and  token=?";  
        List<Object> params=new ArrayList<Object>();  
        params.add( token );  
          
        DBHelper db=new DBHelper();  
        User u=db.findByone(sql, params, User.class);
        String email=u.getUsername();  
        String pwd=u.getPwd();  
        if( u!=null ){  
            long token_exptime=Long.parseLong(u.getTokenexptime());  
            if( curtime>token_exptime ){  
                //激活码过期,先删除该用户记录,然后重新发送邮件  
                sql="delete from tb_user where id='"+u.getId()+"'";  
                db.doUpdate(sql, null);  
                response.sendRedirect("actionfailer.jsp?email="+email+"&pwd="+pwd);  
            //   throw new DataExistAlreadyException("激活码已过期!");  
                 return;  
            }else{  
                //验证激活码是否正确  
                if( token.equals(u.getToken())){  
                    //激活成功, //并更新用户的激活状态,为已激活   
                    sql="update tb_user set status=1 where id='"+u.getId()+"'";  
                    db.doUpdate(sql, null);  
                    response.sendRedirect("actionsuccess.jsp");  
                }else{  
                    sql="delete from tb_user where id='"+u.getId()+"'";  
                    db.doUpdate(sql, null);  
                    response.sendRedirect("actionfailer.jsp?email="+email+"&pwd="+pwd);  
                    return;  
            //       throw new DataExistAlreadyException("激活码不正确");    
                }  
            }  
        }   
          
    }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值