Java注册邮箱激活验证实现代码
最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用
RegisterValidateService.java
packagecom.app.service.impl;
importjava.text.ParseException;
importjava.util.Date;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Service;
importcom.app.dao.UserDao;
importcom.app.tools.MD5Tool;
importcom.app.tools.MD5Util;
importcom.app.tools.SendEmail;
importcom.app.tools.ServiceException;
importcom.code.model.UserModel;
/**
*
*@authorQixuan.Chen
*/
@Service
publicclassRegisterValidateService{
@Autowired
privateUserDaouserDao;
/**
*处理注册
*/
publicvoidprocessregister(Stringemail){
UserModeluser=newUserModel();
Longas=5480l;
user.setId(as);
user.setName("xiaoming");
user.setPassword("324545");
user.setEmail(email);
user.setRegisterTime(newDate());
user.setStatus(0);
///如果处于安全,可以将激活码处理的更复杂点,这里我稍做简单处理
//user.setValidateCode(MD5Tool.MD5Encrypt(email));
user.setValidateCode(MD5Util.encode2hex(email));
userDao.save(user);//保存注册信息
///邮件的内容
StringBuffersb=newStringBuffer("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");
sb.append("<ahref=\"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("发送邮件");
}
/**
*处理激活
*@throwsParseException
*/
///传递激活码和email过来
publicvoidprocessActivate(Stringemail,StringvalidateCode)throwsServiceException,ParseException{
//数据访问层,通过email获取用户信息
UserModeluser=userDao.find(email);
//验证用户是否存在
if(user!=null){
//验证用户激活状态
if(user.getStatus()==0){
///没激活
DatecurrentTime=newDate();//获取当前时间
//验证链接是否过期
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{
thrownewServiceException("激活码不正确");
}
}else{thrownewServiceException("激活码已过期!");
}
}else{
thrownewServiceException("邮箱已激活,请登录!");
}
}else{
thrownewServiceException("该邮箱未注册(邮箱地址不存在)!");
}
}
}
RegisterController.java
packagecom.app.web.controller;
importjava.text.ParseException;
importjavax.annotation.Resource;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.servlet.ModelAndView;
importcom.app.service.impl.RegisterValidateService;
importcom.app.tools.ServiceException;
@Controller
publicclassRegisterController{
@Resource
privateRegisterValidateServiceservice;
@RequestMapping(value="/user/register",method={RequestMethod.GET,RequestMethod.POST})
publicModelAndView load(HttpServletRequestrequest,HttpServletResponseresponse)throwsParseException{
Stringaction=request.getParameter("action");
System.out.println("-----r----"+action);
ModelAndViewmav=newModelAndView();
if("register".equals(action)){
//注册
Stringemail=request.getParameter("email");
service.processregister(email);//发邮箱激活
mav.addObject("text","注册成功");
mav.setViewName("register/register_success");
}
elseif("activate".equals(action)){
//激活
Stringemail=request.getParameter("email");//获取email
StringvalidateCode=request.getParameter("validateCode");//激活码
try{
service.processActivate(email,validateCode);//调用激活方法
mav.setViewName("register/activate_success");
}catch(ServiceExceptione){
request.setAttribute("message",e.getMessage());
mav.setViewName("register/activate_failure");
}
}
returnmav;
}
}
UserDao.java(这里个人没有做入库操作,只是利用集合,做过效果出来0_0)
packagecom.app.dao;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.HashMap;
importorg.springframework.stereotype.Repository;
importcom.code.model.UserModel;
/**
*
*@authorQixuan.Chen
*/
@Repository
publicclassUserDao{
publicHashMap<String,String>map=newHashMap<String,String>();
/**
*@保存注册信息
* privateLongid;
privateStringname;
privateStringpassword;
privateStringemail;//注册账号
privateintstatus;//激活状态
privateStringvalidateCode;//激活码
privateDate registerTime;//注册时间
*/
publicvoidsave(UserModeluser){
System.out.println("cicicici");
map.put("id",String.valueOf(user.getId()));
map.put("email",user.getEmail());
map.put("validateCode",user.getValidateCode());
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddhhmmss");
Stringtime=sdf.format(user.getRegisterTime());
map.put("registerTime",time);
intstatus=user.getStatus();
map.put("status",String.valueOf(status));
map.put("name",user.getName());
Stringt2=sdf.format(user.getLastActivateTime());
map.put("activeLastTime",String.valueOf(t2));
System.out.println("=======s========="+status);
}
/**
*@更新user
*/
publicvoidupdate(UserModeluser){
map.put("email",user.getEmail());
map.put("validateCode",user.getValidateCode());
Datetime=user.getRegisterTime();
map.put("registerTime",String.valueOf(time));
intstatus=user.getStatus();
map.put("status",String.valueOf(status));
System.out.println("=======st========="+status);
}
/**
*@throwsParseException
*@查找信息
*/
publicUserModelfind(Stringemail)throwsParseException{
UserModeluser=newUserModel();
user.setEmail(map.get("email"));
user.setName(map.get("name"));
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddhhmmss");
Dateday=sdf.parse(map.get("registerTime"));
user.setRegisterTime(day);
user.setStatus(Integer.valueOf(map.get("status")));
user.setValidateCode(map.get("validateCode"));
returnuser;
}
}
UserModel.java
packagecom.code.model;
importjava.beans.Transient;
importjava.util.Calendar;
importjava.util.Date;
publicclassUserModel{
privateLongid;
privateStringname;
privateStringpassword;
privateStringemail;//注册账号
privateintstatus=0;//激活状态
privateStringvalidateCode;//激活码
privateDate registerTime;//注册时间
/////////////////
publicLonggetId(){
returnid;
}
publicvoidsetId(Longid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicintgetStatus(){
returnstatus;
}
publicvoidsetStatus(intstatus){
this.status=status;
}
publicStringgetValidateCode(){
returnvalidateCode;
}
publicvoidsetValidateCode(StringvalidateCode){
this.validateCode=validateCode;
}
publicDategetRegisterTime(){
returnregisterTime;
}
publicvoidsetRegisterTime(DateregisterTime){
this.registerTime=registerTime;
}
/////////////////////////
@Transient
publicDategetLastActivateTime(){
Calendarcl=Calendar.getInstance();
cl.setTime(registerTime);
cl.add(Calendar.DATE,2);
returncl.getTime();
}
}
SendEmail.java
packagecom.app.tools;
importjava.util.Date;
importjava.util.Properties;
importjavax.mail.Authenticator;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.PasswordAuthentication;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeMessage;
/**
*
*@authorQixuan.Chen
*/
publicclassSendEmail{
publicstaticfinalStringHOST="smtp.163.com";
publicstaticfinalStringPROTOCOL="smtp";
publicstaticfinalintPORT=25;
publicstaticfinalStringFROM="xxxxx@xx.com";//发件人的email
publicstaticfinalStringPWD="123456";//发件人密码
/**
*获取Session
*@return
*/
privatestaticSessiongetSession(){
Propertiesprops=newProperties();
props.put("mail.smtp.host",HOST);//设置服务器地址
props.put("mail.store.protocol",PROTOCOL);//设置协议
props.put("mail.smtp.port",PORT);//设置端口
props.put("mail.smtp.auth",true);
Authenticatorauthenticator=newAuthenticator(){
@Override
protectedPasswordAuthenticationgetPasswordAuthentication(){
returnnewPasswordAuthentication(FROM,PWD);
}
};
Sessionsession=Session.getDefaultInstance(props,authenticator);
returnsession;
}
publicstaticvoidsend(StringtoEmail,Stringcontent){
Sessionsession=getSession();
try{
System.out.println("--send--"+content);
//Instantiateamessage
Messagemsg=newMimeMessage(session);
//Setmessageattributes
msg.setFrom(newInternetAddress(FROM));
InternetAddress[]address={newInternetAddress(toEmail)};
msg.setRecipients(Message.RecipientType.TO,address);
msg.setSubject("账号激活邮件");
msg.setSentDate(newDate());
msg.setContent(content,"text/html;charset=utf-8");
//Sendthemessage
Transport.send(msg);
}
catch(MessagingExceptionmex){
mex.printStackTrace();
}
}
}
MD5Util.java
packagecom.app.tools;
importjava.io.UnsupportedEncodingException;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
publicclassMD5Util{
/**
*将源字符串使用MD5加密为字节数组
*@paramsource
*@return
*/
publicstaticbyte[]encode2bytes(Stringsource){
byte[]result=null;
try{
MessageDigestmd=MessageDigest.getInstance("MD5");
md.reset();
md.update(source.getBytes("UTF-8"));
result=md.digest();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
returnresult;
}
/**
*将源字符串使用MD5加密为32位16进制数
*@paramsource
*@return
*/
publicstaticStringencode2hex(Stringsource){
byte[]data=encode2bytes(source);
StringBufferhexString=newStringBuffer();
for(inti=0;i<data.length;i++){
Stringhex=Integer.toHexString(0xff&data[i]);
if(hex.length()==1){
hexString.append("0");
}
hexString.append(hex);
}
returnhexString.toString();
}
/**
*验证字符串是否匹配
*@paramunknown待验证的字符串
*@paramokHex 使用MD5加密过的16进制字符串
*@return 匹配返回true,不匹配返回false
*/
publicstaticbooleanvalidate(Stringunknown,StringokHex){
returnokHex.equals(encode2hex(unknown));
}
}
ServiceException.java
packagecom.app.tools;
publicclassServiceExceptionextendsException{
privatestaticfinallongserialVersionUID=-1708015121235851228L;
publicServiceException(Stringmessage){
super(message);
}
}
jsp页面
registerEmailValidae.jsp
<h2>注册激活</h2>
<formaction="user/register?action=register"method="post">
Email:<inputtype="text"id="email"name="email"value="">
<inputtype="submit"value="提交">
</form>
register_success.jsp
<body>
恭喜你注册成功!请到注册的邮箱点击链接激活!
</body>
activate_success.jsp:
<body>
账号激活成功,点击这里去登录!
</body>
activate_failure.jsp:
<body>
激活失败!错误信息:${message}
</body>
效果图:
1
2
3
4
5
相关文章
- 怎么用命令提示符运行JAVA代码_java命令提示符如何进入
- java 上传文件接口_Java接口实现文件上传
- java删除文件目录及文件_Java删除文件,目录
- java backoff_Java BackOff类代码示例
- Java的控制台输入输出语句[通俗易懂]
- java冒泡排序经典代码_Java 8大经典排序算法(含源代码),必须收藏!
- java冒泡排序代码_Java冒泡排序
- java中random方法取值范围_Java Random.nextInt()方法,随机产生某个范围内的整数
- python生兔子问题(递归算法)_java实现斐波那契数列
- Java入门代码_java编程自学网
- 初探java安全之RMI
- java 数字信封_【Java密码学】使用Bouncy Castle生成数字签名、数字信封
- java基于ssh的旅游系统
- 【ES三周年】Java与Elasticsearch实战:GPT助您深入理解数据建模与映射
- 机制Redis Java实现的过期机制(redisjava过期)
- Java中使用Redis包实现高效缓存(redis包java)
- 如何在Linux系统下成功安装Java?(linux下安装java)
- MySQL与Java结合,构建高效多功能缓存系统(MySQL java缓存)
- 一部分Oracle驱动Java的成功之路(java是oracle的)
- Java与Oracle 一种天生的结合(java属于oracle)
- 实现基于Redis的分布式锁Java实现(redis锁java代码)
- 缓存使用Redis让Java代码更加迅速缓存设置(redis设置java)
- JAVA简单链接Oracle数据库注册和登陆功能的实现代码
- java实现的满天星效果实例