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注册帐号邮箱激活验证实现的更多相关文章
- Java实现邮箱激活验证
最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 RegisterValidateService.java [java] view plaincopyprint? package co ...
- Java实现邮箱激活验证2
SendEmail.java [java] view plaincopyprint? package com.app.tools; import java.util.Date; import ja ...
- Java实现注册邮箱激活验证
邮件发送servelet实现 package com.xbs.register.main; import java.io.IOException;import java.util.Date;impor ...
- servlet邮箱激活验证实例含代码
也有很多人本来有机会的,他们都拒绝了,不想让自己太累,太麻烦.或者中途被情绪所左右,半途而废了. 成长是有代价的,同样悠闲也是有代价的. 流程: 用户填写相关信息,点击注册按钮 系统先将用户记录保存到 ...
- 主攻ASP.NET MVC4.0之重生:发邮箱激活验证
导入Interop.jmail组件 using jmail;using System.Net.Mail; 点击下载源代码 Controller相关代码 public class SendEmailCo ...
- java 手机号码+邮箱的验证
import java.util.regex.Pattern; //导入的包 1:String REGEX_MOBILE = "^((17[0-9])|(14[0-9])|(13[0-9]) ...
- Java实现邮箱验证
Java实现邮箱验证 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开 ...
- 转:java 帐号激活与忘记密码 实例
原文链接:http://endual.iteye.com/blog/1613679 一.帐户激活 在 很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激 ...
- java工具类(二)之java正则表达式表单验证
java正则表达式表单验证类工具类(验证邮箱.手机号码.qq号码等) 这篇文章主要介绍了java使用正则表达式进行表单验证工具类,可以验证邮箱.手机号码.qq号码等方法,需要的朋友可以参考下. jav ...
随机推荐
- python 的 json 转换
python 的 json 转换 本文为原创文章,禁止转载! 本文以 json.dumps() 和 json.loads() 方法进行 Python 数据和 json 格式之间转换,进行讲解 首先比 ...
- Object之equals和hashCode
译者注 :你可能会觉得Java很简单,Object的equals实现也会非常简单,但是事实并不是你想象的这样,耐心的读完本文,你会发现你对Java了解的是如此的少.如果这篇文章是一份Java程序员的入 ...
- 《Bilateral Multi-Perspective Matching for Natural Language Sentences》(句子匹配)
问题: Natural language sentence matching (NLSM),自然语言句子匹配,是指比较两个句子并判断句子间关系,是许多任务的一项基本技术.针对NLSM任务,目前有两种流 ...
- 《Convolutional Neural Network Architectures for Matching Natural Language Sentences》句子匹配
模型结构与原理 1. 基于CNN的句子建模 这篇论文主要针对的是句子匹配(Sentence Matching)的问题,但是基础问题仍然是句子建模.首先,文中提出了一种基于CNN的句子建模网络,如下图: ...
- jquery事件 on(),live(),delegate(),blind()
jQuery推出on()的目的有2个,一是为了统一接口,二是为了提高性能, 所以从现在开始用on()替换bind(), live(), delegate吧. 尤其是不要再用live()了,因为它已经处 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON SetComprise1
zw版[转发·台湾nvp系列Delphi例程]HALCON SetComprise1 procedure TForm1.Button1Click(Sender: TObject);var image0 ...
- Ignite内存数据库与sql支持
Ignite采用h2作为内存数据库,支持h2的一切sql语法.如果是本地缓存或者复制缓存,sql执行直接在本地h2数据库中执行,如果是分区缓存,ignite则会分解sql到多个h2数据库执行后再汇总. ...
- MD5验签同一字符串得到不同的MD5签名值可能问题之一
public static String md555(String plainText) throws UnsupportedEncodingException { byte[] secretByte ...
- Linux基础命令---service
service service可以控制系统服务(打开.关闭.重启).service在尽可能可预测的环境中运行SystemV init脚本,删除大多数环境变量并将当前工作目录设置为根目录.脚本参数位于“ ...
- DeepMind已将AlphaGo引入多领域 Al泡沫严重
DeepMind已将AlphaGo引入多领域 Al泡沫严重 在稳操胜券的前提下,谷歌旗下的AlphaGo还是向柯洁下了战书.4月10日,由中国围棋协会.浙江省体育局.谷歌三方联合宣布,将于5月23日至 ...