{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
用户注册时,输入邮箱地址,获取验证码,我们随机生成5位数字验证码发送给用户的邮箱。同时我们把验证码和当前时间存储到httpsession对象中(格式:验证码#时间)。
然后用户通过表单提交自己的注册信息和验证码。我们先判断用户名是否重复(为空和密码一致就交给前端吧),然后我们从session中取出我们存储的字符串分隔,获取验证码和生成验证码的时间,先比较验证码是否正确,如果正确就比较时间是否在一段时间内,都符合才注册(进行数据库操作)。
代码实现尊崇ssh框架结构,action,service,dao逐层调用。
1:引入jar包
spring自带的包spring-context-support,就可以使用spring自带的发送邮件api。
2:创建mailutil对象
importjava.util.properties;importorg.springframework.mail.simplemailmessage;importorg.springframework.mail.javamail.javamailsenderimpl;publicclassmailutil{//使用对象注入的方式记得配置文件privatejavamailsenderimplsenderimpl;publicvoidsetsenderimpl(javamailsenderimplsenderimpl){this.senderimpl=senderimpl;}privatesimplemailmessagemailmessage;publicvoidsetmailmessage(simplemailmessagemailmessage){this.mailmessage=mailmessage;}privatepropertiesprop;publicvoidsetprop(propertiesprop){this.prop=prop;}//发送验证码的方法,to是目标邮箱地址,text是发送的验证码(事先生成)publicbooleansendmail(stringto,stringtext){system.out.println("sendmail...util...");try{//设定mailserversenderimpl.sethost("smtp.163.com");//设置收件人,寄件人用数组发送多个邮件//string[]array=newstring[]{"sun111@163.com","sun222@sohu.com"};//mailmessage.setto(array);mailmessage.setto(to);mailmessage.setfrom("自己的邮箱");mailmessage.setsubject("主题");mailmessage.settext("内容"+text);senderimpl.setusername("自己的邮箱");senderimpl.setpassword("密码");prop.put("mail.smtp.auth","true");prop.put("mail.smtp.timeout","25000");senderimpl.setjavamailproperties(prop);//发送邮件senderimpl.send(mailmessage);system.out.println("发送邮件成功");returntrue;}catch(exceptione){system.out.println("发送邮件失败");returnfalse;}}}
3:创建timeutil类
因为我们是保证有效时间的,所以就要时间工具
importjava.text.simpledateformat;importjava.util.calendar;importjava.util.date;importorg.junit.test;publicclasstimeutil{//获取时间返回毫秒级时间publicstringgettime(){system.out.println("gettime...util...");//simpledateformatsdf=newsimpledateformat("yyyy-mm-ddhh:mm:ss");calendarcalendar=calendar.getinstance();longdate=calendar.gettime().gettime();//获取毫秒时间//stringdatestringpastring=sdf.format(date);//system.out.println(datestringpastring);returndate.tostring();}publicbooleancmptime(stringtime){system.out.println("cmptime...util...");longtemptime=long.parselong(time);system.out.println("temptime"+temptime);//在获取现在的时间calendarcalendar=calendar.getinstance();longdate=calendar.gettime().gettime();//获取毫秒时间system.out.println("date"+date);if(date-temptime>600000){//10分钟returnfalse;}else{returntrue;}}}
4:action
//获取邮箱验证码publicstringgetvcode()throwsioexception{system.out.println("getvcode...action...");//获得request和response对象httpservletrequestrequest=servletactioncontext.getrequest();httpservletresponseresponse=servletactioncontext.getresponse();response.setcontenttype("application/json;charset=utf-8");response.setheader("access-control-allow-origin","*");printwriterout=response.getwriter();jsonobjectjson=newjsonobject();try{stringemail=request.getparameter("email");booleanflag=userservice.getvcode(email);if(flag==true){json.put("msg","1");//生成了验证码并发送给了用户}else{json.put("msg","0");//未获取到}}catch(exceptione){json.put("msg","0");}finally{out.write(json.tostring());out.flush();out.close();}returnnull;}//用户注册publicstringregister()throwsioexception{system.out.println("register...action...");//获得request和response对象httpservletrequestrequest=servletactioncontext.getrequest();httpservletresponseresponse=servletactioncontext.getresponse();response.setcontenttype("application/json;charset=utf-8");response.setheader("access-control-allow-origin","*");printwriterout=response.getwriter();jsonobjectjson=newjsonobject();try{stringusername=request.getparameter("username");stringpassword=request.getparameter("password");stringnickname=request.getparameter("nickname");stringemail=request.getparameter("email");stringvcode=request.getparameter("vcode");//先查找该用户名是否被注册booleanflag=userservice.searchuser(username);if(flag==true){json.put("msg","3");//用户名重复}else{//看验证码是否正确以及是否失效flag=userservice.cmpvcode(vcode);if(flag==true){useruser=newuser();user.setusername(username);user.setpassword(password);user.setnickname(nickname);user.setemail(email);booleanflag2=userservice.register(user);if(flag2==true){json.put("msg","1");//注册成功}else{json.put("msg","0");//注册失败}}else{system.out.println("验证码匹配失败");json.put("msg","0");//验证码匹配失败}}}catch(exceptione){system.out.println("注册异常");json.put("msg","0");//注册异常}finally{out.write(json.tostring());out.flush();out.close();}returnnull;}
5:service
//发送邮件获取验证码publicbooleangetvcode(stringemail){system.out.println("getvcode...service...");//随机生成5验证码integerx=(int)((math.random()*9+1)*10000);stringtext=x.tostring();booleanflag=mailutil.sendmail(email,text);if(flag==true){//发送成功,把验证码和时间记录stringnowtime=timeutil.gettime();//存入session验证码#时间httpsessionsession=servletactioncontext.getrequest().getsession();session.setattribute("vcodetime",text+"#"+nowtime);system.out.println(session.getattribute("vcodetime"));returntrue;}else{returnfalse;}}//比较验证码是否正确以及是否失效publicbooleancmpvcode(stringvcode){system.out.println("cmpvcode...service...");try{httpsessionsession=servletactioncontext.getrequest().getsession();stringvcodetime=(string)session.getattribute("vcodetime");stringvcodetimearray[]=vcodetime.split("#");//先比较验证码是否正确if(vcodetimearray[0].equals(vcode)){booleanflag=timeutil.cmptime(vcodetimearray[1]);if(flag==true){returntrue;}}returnfalse;}catch(exceptione){system.out.println(e.tostring());returnfalse;}}//注册publicbooleanregister(useruser){system.out.println("register...service...");intflag=userdao.adduser(user);if(flag!=0){httpsessionsession=servletactioncontext.getrequest().getsession();session.setattribute("uid",flag);//用户id放入sessionreturntrue;}else{returnfalse;}}
6:dao