Java注册帐号邮箱激活验证实现

Posted 旧巷里的旧少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java注册帐号邮箱激活验证实现相关的知识,希望对你有一定的参考价值。

Java注册帐号邮箱激活验证实现

1.需要加入发送邮件的mail.jar:

http://www.oracle.com/technetwork/java/javamail/index-138643.html

?

2.将字符串通过MD5进行加密的工具类:

class="java">import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 创建人: zy
 * 创建时间: 2014年10月22日 下午2:36:19
 * 类描述:将字符串进行加密的工具类
 */
public class MD5Util {

	/**
	 * 将源字符串通过MD5进行加密为字节数组
	 * @param source
	 * @return
	 */
	public static byte[] encodeToBytes(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 encodeToHex(String source) {
		byte[] data = encodeToBytes(source);//先加密为字节数组
		StringBuffer hexSb = new StringBuffer();
		for (int i = 0; i < data.length; i++) {
			String hex = Integer.toHexString(0xff & data[i]);
			if (hex.length() == 1) {
				hexSb.append("0");
			}
			hexSb.append(hex);
		}
		return hexSb.toString();
	}
	
	/**
	 * 验证字符串是否匹配
	 * @param unknown	待验证的字符串
	 * @param okHex		使用MD5加密后的16进制字符串
	 * @return
	 */
	public static boolean validate(String unknown , String okHex) {
		return okHex.equals(encodeToHex(unknown));
	}
}

?

?

3.发送邮件的工具类:

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.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 创建人: zy
 * 创建时间: 2014年10月22日 下午3:04:11
 * 类描述:发送邮件工具类
 */
public class SendMailUtil {
	
	public static final String HOST = "smtp.163.com";
	public static final String PROTOCOL = "smtp";
	public static final int PORT = 25;
	public static final String SENDER = "***@163.com";//此处需要与host相同的网站
	public static final String SENDERPWD = "********";
	
	/**
	 * 获取用于发送邮件的Session
	 * @return
	 */
	public 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(SENDER, SENDERPWD);
            }
		};
        Session session = Session.getDefaultInstance(props,authenticator);
        return session;
	}
	
	/**
	 * 发送邮件
	 * @param receiver
	 * @param content
	 */
	public static void send(String receiver, String content) {
		Session session = getSession();
		try {
			System.out.println("-------开始发送-------");
			Message msg = new MimeMessage(session);
			//设置message属性
			msg.setFrom(new InternetAddress(SENDER));
			InternetAddress[] addrs = {new InternetAddress(receiver)};
			msg.setRecipients(Message.RecipientType.TO, addrs);
			msg.setSubject("开心网-帐号激活");
			msg.setSentDate(new Date());
			msg.setContent(content,"text/html;charset=utf-8");
			//开始发送
			Transport.send(msg);
                        System.out.println("-------发送完成-------");
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
}

?

?4.发送邮件的Servlet或Action:

User user = userDao.getUser();
if (user != null && user.getQybj() != 1) {
	String email = user.getEmail();
  	StringBuffer content = new StringBuffer("<h2>请点击下面的链接激活帐号,链接只能使用一次,请尽快激活!</h2>");
  	String nameMd5 = MD5Util.encodeToHex(user.getUsername()+"审核通过");//创建加密字符串
  	content.append("<a style=‘font-size:16px;‘ href=‘http://localhost:8080/czfc/register.reg?doType=activate&")
  	.append("email=" + email + "&name=" + nameMd5 +"‘>")
  	.append("http://localhost:8080/czfc/register.reg?doType=activate&")
  	.append("email=" + email + "&name=" + nameMd5 + "</a><br/><br/>")
  	.append("<span style=‘color:blue;font-size:20px;font-weight:bold;‘>———浙江常山欢迎您!<span>");
  	SendMailUtil.send(email, content.toString());//开始发送邮件
} 

?

5.点击链接验证的Servlet或Action:

String userName = request.getParameter("name");
String email = request.getParameter("email");
UserPostDao userDao = new UserPostDao();
User user = userDao.getUserByEmail(email);
if (user == null) {
	destination = "/register/activeFail.jsp";
	request.setAttribute("msg", "链接错误");
}
else {
	String userNameMd5 = MD5Util.encodeToHex(user.getUsername()+"审核通过");
	if (!(userName.equals(userNameMd5)) {
		request.setAttribute("msg", "链接错误");
		destination = "/register/activeFail.jsp";
	}
	else {
		boolean done = userDao.updateUserStatusByEmail(email, 1);
		if (done) {
			request.setAttribute("userId", user.getUserid());
			request.setAttribute("userName", user.getUsername());
			destination = "/register/activeSuccess.jsp";
		}
		else {
			request.setAttribute("msg", "激活出错");
			destination = "/register/activeFail.jsp";
		}
	}
}

?


技术分享
?
技术分享
?

    • 查看图片附件

以上是关于Java注册帐号邮箱激活验证实现的主要内容,如果未能解决你的问题,请参考以下文章

PHP激活用户注册验证邮箱

java实现注册邮箱激活验证

Java实现注册时发送激活邮件验证

用java实现邮箱的验证以及激活

转:java 帐号激活与忘记密码 实例

自动化测试脚本-帐号注册到激活