忘记密码发送验证码到邮箱

来源:互联网 发布:从零开始学c语言 pdf 编辑:程序博客网 时间:2024/05/01 12:03

1.首先引入所需要的js样式

<script type="text/javascript" src="js/btnsendcode.js"></script>

<script language="javascript">
$(function() {
$.extend($.fn.validatebox.defaults.rules, {   
   equals: {   
       validator: function(value,param){   
           return value == $(param[0]).val();   
       },   
       message: '两次输入的密码不一致,请检查!'  
   }   
});
$('.loginbox').css({
'position' : 'absolute',
'left' : ($(window).width() - 692) / 2
});
$(window).resize(function() {
$('.loginbox').css({
'position' : 'absolute',
'left' : ($(window).width() - 692) / 2
});
})
$('#msform').form({   
   url:'user/reg',
   onSubmit: function(){
    return $(this).form('validate');
   },
   success:function(data){
       alert(data);
       switchDiv();
   }
});
$('.resetForm').form({   
url:'user/resetpassword', 
   onSubmit: function(){
    return $(this).form('validate');
   },
   success:function(data){   
       alert(data);
       if(data=='修改成功!'){
       switchDiv();
       }
   }
});
${message}
});
function switchDiv(){
if($('#flag').text()=='注册用户'){
$('#login').css('display','none');
$('#reg').css('display','block');
$('#flag').text('用户登录');
$('#title').text('欢迎注册Open WiFi管理系统');
}else{
$('#login').css('display','block');
$('#reg').css('display','none');
$('#flag').text('注册用户');
$('#title').text('欢迎登录Open WiFi管理系统');
}
if($('#rest').css('display')=='block'){
$('#rest').css('display','none');
}
}
function reset(){
$('#login').css('display','none');
$('#rest').css('display','block');
$('#flag').text('用户登录');
}
</script>

再看下login.jsp页面的表单内容

<form id="msform" class="resetForm" method="post"  >
<!-- progressbar -->
<ul id="progressbar">
<li class="active">填写账号</li>
<li>邮箱地址</li>
<li>输入密码</li>
</ul>
<!-- fieldsets -->
<fieldset>
<h2 class="fs-title">需要重置的账户</h2>
<h3 class="fs-subtitle">这是第一步</h3>
<input class="easyui-validatebox"  data-options="required:true,missingMessage:'请输入账号!'"  type="text" name="name" placeholder="账户" />
<input type="button" name="next" class="next action-button" value="下一步" />
</fieldset>
<fieldset>
<h2 class="fs-title">邮箱地址</h2>
<h3 class="fs-subtitle">注册账户时候的邮箱</h3>
<input class="easyui-validatebox"  data-options="required:true,validType:'email',missingMessage:'请输入E-Mail!'" type="text" id="sendemail" name="email" placeholder="E-Mail" />
<input class="easyui-validatebox"  data-options="required:true,missingMessage:'请输入验证码!'" type="text" name="checknum" value="" id="checkNum" placeholder="验证码" />
<input id="btnSendCode" type="button" value="发送验证码" onclick="sendMessage()" /></p>
<input type="button" name="previous" class="previous action-button" value="上一步" />
<input type="button" name="next" class="next action-button" value="下一步" />
</fieldset>
<fieldset>
<h2 class="fs-title">请填写新密码</h2>
<h3 class="fs-subtitle">我们将会为你保存它</h3>
<input class="easyui-validatebox"  id="resetpwd"  data-options="required:true,missingMessage:'请输入密码!'" type="password" placeholder="密码" />
<input class="easyui-validatebox" data-options="required:true,missingMessage:'请再次输入密码!'"  type="password" name="password" placeholder="确认密码" validType="equals['#resetpwd']"/>
<input type="button" name="previous" class="previous action-button" value="上一步" />
<input type="submit" class="submit action-button" value="重置"  />
</fieldset>
</form>

2.再写一下btnsendcode.js页面的内容

var InterValObj; // timer变量,控制时间
var count = 60; // 间隔函数,1秒执行
var email;
var curCount;// 当前剩余秒数
function sendMessage() {
email= document.getElementById("sendemail").value;
checknum= document.getElementById("checkNum").value;
curCount = count;
// 设置button效果,开outPrint("用户不存在,请检查是否输入正确!");始计时
$("#btnSendCode").attr("disabled", "true");
$("#btnSendCode").val("请在" + curCount + "秒内输入验证码");
InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器,1秒执行一次
// 向后台发送处理数据
$.ajax({
type : "POST",
url : "user/sendemail",
data :"email="+email+"&checknum="+checknum,
success : function(msg) {
alert(msg);
}
});
}
// timer处理函数
function SetRemainTime() {
if (curCount == 0) {
window.clearInterval(InterValObj);// 停止计时器
$("#btnSendCode").removeAttr("disabled");// 启用按钮
$("#btnSendCode").val("重新发送验证码");
code = ""; // 清除验证码。如果不清除,过时间后,输入收到的验证码依然有效
} else {
curCount--;
$("#btnSendCode").val("请在" + curCount + "秒内输入验证码");
}
}

3.这个是Action里面的主要方法的内容

/**
* 重置密码
*/
public void resetpassword(){
try {
code=(String)getSession().getAttribute("code");
getSession().setAttribute("code", null);
//判断session里面的用户是不是null,如果为空,择是在登陆页面重置密码,如果不为null,择是登陆后修改密码
if(user==null){
//查询用户是否存在
List<Criterion> criterions = new ArrayList<Criterion>();
criterions.add(Restrictions.eq("name", name));
user = usersService.executeQueryUnique(criterions, null);
if(user==null){
outPrint("用户不存在,请检查是否输入正确!");
return;
}}
if(user.getEmail().equals(email)&&checknum.equals(code)){
user.setPassword(new MD5Code().getMD5ofStr(password));
usersService.saveOrUpdate(user);
outPrint("修改成功!");
}else {
outPrint("修改失败,请检查!");
}

} catch (Exception e) {
e.printStackTrace();
outPrint("密码修改失败");
}

}
/**
* 给邮箱发送验证码
* 获取到的是email地址和6位验证码 code
*/
public void sendemail(){
try {
String charList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
code = "";
java.util.Random f = new Random();
for(int i=0;i<6;i++)
{
code += charList.charAt(Math.abs(f.nextInt())%charList.length());
}
getSession().setAttribute("code", code);
SendMail sendemail = new SendMail();
sendemail.setHostName("smtp.qq.com");
sendemail.setSendMailAddress("2275616529@qq.com");
sendemail.setMailPassword("TONG88057309");
sendemail.setMailTitle("重设密码");
String[] mailAddres = {email};
sendemail.setGetMailAddress(mailAddres);
sendemail.setMailContent("您好,您在进行重设密码服务。您的验证码是:"+code);

if(sendemail.send()){
outPrint("发送成功!");
}else{
outPrint("发送失败!");
}

} catch (Exception e) {
e.printStackTrace();
outPrint("发送失败!");
}
}


4.由于调用了SendMail的方法所以给出SendMail.java的内容

package com.xerxes.action;


import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;


import javax.servlet.http.Cookie;


import org.apache.commons.mail.SimpleEmail;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;


import com.xerxes.pojo.RoleAction;
import com.xerxes.pojo.Roles;
import com.xerxes.pojo.Users;
import com.xerxes.pojo.UsersRole;
import com.xerxes.util.DateUtil;
import com.xerxes.util.MD5Code;
import com.xerxes.util.SendMail;
import com.xerxes.util.json.JsonUtil;


/**
 * @
 * 
 *         E-mail: wangzehao@qianbai.net.cn
 * 
 * @version v1.1
 * 
 *          创建时间:2014-5-4 下午4:38:07
 */
public class UsersAction extends BaseAction {


private static final long serialVersionUID = 7217381612938807192L;
private String code;
private String checknum;
/**
* 账号
*/
private String name;
/**
* 账号注册的类别,自主注册,还是添加。
*/
private String state;

/**
* 用户email
*/
private String email;
/**
* 旧密码
*/
private String oldpassword;
/**
* 密码
*/
private String password;

/**
* 是否记住密码
*/
private String rememberUP;

/**
* Users对象
*/
private Users users;

/**
* 要删除的用户的ID
*/
private String ids;

/**
* 跳转的页面
*/
private String page;

private Roles roles;

private Set<RoleAction> roleActions;

private UsersRole usersRole;
/**
* 用户登陆
* @throws IOException 
*/
public void login() throws IOException{
try {
/*
* 查询
*/
List<Criterion> criterions = new ArrayList<Criterion>();
criterions.add(Restrictions.eq("name",name));
criterions.add(Restrictions.eq("password",new MD5Code().getMD5ofStr(password)));
users = usersService.executeQueryUnique(criterions,null);

/*
* 判断查询出来的users是否为null,如果为空则跳转登陆页面,并提示用户,相反则登陆到主页面,并将users放入到Session中
*/
if( users != null){
getSession().setAttribute("userId", users.getId());
//判断是否记住密码
if("on".equals(rememberUP)){
Cookie cookieuser = new Cookie("user",name+"-"+password); 
   //设定有效时间  以秒(s)为单位
   cookieuser.setMaxAge(Integer.MAX_VALUE); 
   //设置Cookie路径和域名
   cookieuser.setPath("/") ;
   getResponse().addCookie(cookieuser); 
}else {
Cookie cookieuser = new Cookie("user",null);
cookieuser.setMaxAge(-1);
cookieuser.setPath("/") ;
   getResponse().addCookie(cookieuser);
}
users.setLastIp(getRequest().getRemoteAddr());
users.setLastTime(new Timestamp(new Date().getTime()));
usersService.saveOrUpdate(users);
//将user放入到session
super.getSession().setAttribute("userInfo", users);
logger.info("用户:"+users.getName()+"登陆系统!"+"登陆IP["+super.getRequest().getRemoteHost()+"]");
//跳转到授权action
super.sendRedirect("accredit");
}else{
//设置错误信息
setMessage("alert('账号密码错误!')");
//跳转登陆页面
super.forward("../WEB-INF/page/login.jsp");

} catch (Exception e) {
e.printStackTrace();
//设置错误信息
setMessage("alert('系统异常!')");
//跳转登陆页面
super.forward("../WEB-INF/page/login.jsp");
}
}
public void accredit(){ 
try {
String menu  = (String) getSession().getAttribute("menu");
List<Criterion> criterions = null;
if(menu==null){
menu="";
users=(Users) super.getSession().getAttribute("userInfo");
if(users==null){
//设置错误信息
setMessage("alert('请输入账号密码!')");
//跳转登陆页面
super.forward("../WEB-INF/page/login.jsp");
return;
}
criterions = new ArrayList<Criterion>();
criterions.add(Restrictions.eq("users",users));
usersRole = usersRoleService.executeQueryUnique(criterions,null);
roles = usersRole.getRoles();
if(roles.getName().equals(ATUO_REG)){
getSession().setAttribute("autoReg", "readonly=\"readonly\"");
}
roleActions = roles.getRoleactions();
Iterator<RoleAction> iterator = roleActions.iterator();
while (iterator.hasNext()) {
RoleAction roleAction = (RoleAction) iterator.next();
menu+=roleAction.getAction().getFlag()+",";
getSession().setAttribute(roleAction.getAction().getFlag(),roleAction.getAction().getPage());
}
getSession().setAttribute("menu", menu.substring(0, menu.length()-1));
}
criterions = new ArrayList<Criterion>();
criterions.add(Restrictions.eq("online", true));
criterions.add(Restrictions.eq("status", "LONGIN"));
criterions.add(Restrictions.eq("status", "LONGIN"));
getSession().setAttribute("online", connectionsService.getCount(criterions));
super.forward("/WEB-INF/page/main/main.jsp");
} catch (Exception e) {
e.printStackTrace();
//设置错误信息
setMessage("alert('您没有权限登陆!')");
//跳转登陆页面
super.forward("../WEB-INF/page/login.jsp");
}
}

/**
* 注销用户
* 清空session,并跳转到登陆页面
* @throws IOException
*/
public void loginout() throws IOException{
users = (Users) getSession().getAttribute("userInfo");
logger.info("用户:["+users.getName()+"]注销系统!");
//清空Session
getSession().setAttribute("userInfo", null);
String menu = (String) getSession().getAttribute("menu");
String[] menus=menu.split(",");
for (String string : menus) {
getSession().setAttribute(string, null);
}
getSession().setAttribute("menu", null);
getSession().setAttribute("online",null);
getSession().setAttribute("autoReg", null);
//跳转到登陆页面
sendRedirect("../lg");
}

/**
* 重置密码
*/
public void resetpassword(){
try {
code=(String)getSession().getAttribute("code");
getSession().setAttribute("code", null);
//判断session里面的用户是不是null,如果为空,择是在登陆页面重置密码,如果不为null,择是登陆后修改密码
if(user==null){
//查询用户是否存在
List<Criterion> criterions = new ArrayList<Criterion>();
criterions.add(Restrictions.eq("name", name));
user = usersService.executeQueryUnique(criterions, null);
if(user==null){
outPrint("用户不存在,请检查是否输入正确!");
return;
}}
if(user.getEmail().equals(email)&&checknum.equals(code)){
user.setPassword(new MD5Code().getMD5ofStr(password));
usersService.saveOrUpdate(user);
outPrint("修改成功!");
}else {
outPrint("修改失败,请检查!");
}

} catch (Exception e) {
e.printStackTrace();
outPrint("密码修改失败");
}

}
/**
* 给邮箱发送验证码
* 获取到的是email地址和6位验证码 code
*/
public void sendemail(){
try {
String charList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
code = "";
java.util.Random f = new Random();
for(int i=0;i<6;i++)
{
code += charList.charAt(Math.abs(f.nextInt())%charList.length());
}
getSession().setAttribute("code", code);
SendMail sendemail = new SendMail();
sendemail.setHostName("smtp.qq.com");
sendemail.setSendMailAddress("2275616529@qq.com");
sendemail.setMailPassword("TONG88057309");
sendemail.setMailTitle("重设密码");
String[] mailAddres = {email};
sendemail.setGetMailAddress(mailAddres);
sendemail.setMailContent("您好,您在进行重设密码服务。您的验证码是:"+code);

if(sendemail.send()){
outPrint("发送成功!");
}else{
outPrint("发送失败!");
}

} catch (Exception e) {
e.printStackTrace();
outPrint("发送失败!");
}
}

private Object parseInt(double d) {
// TODO Auto-generated method stub
return null;
}
/**
* 修改密码
*/
public void reset(){
try {
//判断session里面的用户是不是null,如果为空,择是在登陆页面重置密码,如果不为null,择是登陆后修改密码
if(user==null){
//查询用户是否存在
List<Criterion> criterions = new ArrayList<Criterion>();
criterions.add(Restrictions.eq("name", name));
user = usersService.executeQueryUnique(criterions, null);
if(user==null){
outPrint("用户不存在,请检查是否输入正确!");
return;
}
}
if(user.getPassword().equals(new MD5Code().getMD5ofStr(oldpassword))){
user.setPassword(new MD5Code().getMD5ofStr(password));
usersService.saveOrUpdate(user);
outPrint("修改成功!");
}else {
outPrint("修改失败,请检查!");
}
} catch (Exception e) {
e.printStackTrace();
outPrint("密码修改失败");

}
}
/**
* 保存用户
*/
public void save(){

try {

List<Criterion> criterions = new ArrayList<Criterion>();
criterions.add(Restrictions.eq("name",users.getName()));
if (usersService.executeQueryUnique(criterions,null) != null){
super.outPrint("用户以存在!请重新注册。");
}else {
users.setPassword(new MD5Code().getMD5ofStr(password));
users.setCreateTime(Timestamp.valueOf(DateUtil.format(new Date())));
users.setLastTime(Timestamp.valueOf(DateUtil.format(new Date())));
users.setLastIp("0.0.0.0");
UsersRole newUsersRole=new UsersRole();
Roles roles=null;
if(this.state!=null&&this.state.equals("zhuce")){
users.setParent_id(13);
criterions.clear();
criterions.add(Restrictions.eq("name","自主注册用户"));
roles=rolesService.executeQueryUnique(criterions, null);
}else{
users.setParent_id(this.user.getId());
criterions.clear();
criterions.add(Restrictions.eq("users",this.user));
UsersRole usersRole=usersRoleService.executeQueryUnique(criterions, null);
String roleName=usersRole.getRoles().getName();

if(roleName.equals("超级管理员")){
criterions.clear();
criterions.add(Restrictions.eq("name","代理商"));
roles=rolesService.executeQueryUnique(criterions, null);
}else if(roleName.equals("代理商")){
criterions.clear();
criterions.add(Restrictions.eq("name","商家用户"));
roles=rolesService.executeQueryUnique(criterions, null);
}
}

if(roles==null){
super.outPrint("没有注册权限!");
return;
}else{
newUsersRole.setRoles(roles);
usersService.save(users);
newUsersRole.setUsers(users);
usersRoleService.save(newUsersRole);
super.outPrint("用户注册成功!");
}

}
} catch (Exception e) {
e.printStackTrace();
super.outPrint("用户注册失败!");
}
}
/**
* 分页获取全部用户
*/
public void show(){
Map<String, Object> jsonMap = new HashMap<String, Object>();
List<Criterion> criterions = new ArrayList<Criterion>();
criterions.add(Restrictions.eq("users", this.user));
UsersRole usersRole=usersRoleService.executeQueryUnique(criterions, null);
String roleName=usersRole.getRoles().getName();
List<Users> usersList=new ArrayList<Users>();
if(roleName.equals("超级管理员")){
criterions.clear();
usersList=usersService.getListForPage(null,null,pageNumber, pageSize, order, sort);
}else if(roleName.equals("代理商")){
criterions.clear();
criterions.add(Restrictions.or(Restrictions.eq("parent_id", this.user.getId()), Restrictions.eq("id", this.user.getId())));

usersList=usersService.getListForPage(criterions,null,pageNumber, pageSize, order, sort);
}else{
criterions.clear();
criterions.add(Restrictions.eq("id", this.user.getId()));
usersList=usersService.getListForPage(criterions,null,pageNumber, pageSize, order, sort);
}
jsonMap.put("total", usersService.getCount(criterions));
jsonMap.put("rows",usersList);
outPrint(JsonUtil.mapTojson(jsonMap));
jsonMap = null;
}

/**
* 批量删除用户
*/
public void del(){
try {
usersService.delete(ids);
outPrint("用户删除成功!");
} catch (Exception e) {
e.printStackTrace();
outPrint("用户删除失败!");
}
}
/**
* 更新用户信息
*/
public void update(){


try {
usersService.saveOrUpdate(users);
outPrint("修改成功!");
} catch (Exception e) {
e.printStackTrace();
outPrint("修改失败!");
}

}

/**
* 跳转页面统一入口
*/
public void forWard() {
if (page != null && page != "")
super.forward("/WEB-INF/page/" + page);
// else
//super.forward("/WEB-INF/page/main.jsp");
}
public String getChecknum() {
return checknum;
}
public void setChecknum(String checknum) {
this.checknum = checknum;
}
public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}
public String getOldpassword() {
return oldpassword;
}
public void setOldpassword(String oldpassword) {
this.oldpassword = oldpassword;
}
public String getPassword() {
return password;
}


public void setPassword(String password) {
this.password = password;
}


public Users getUsers() {
return users;
}


public void setUsers(Users users) {
this.users = users;
}


public String getPage() {
return page;
}


public void setPage(String page) {
this.page = page;
}


public String getIds() {
return ids;
}


public void setIds(String ids) {
this.ids = ids;
}

public String getEmail() {
return email;
}


public void setEmail(String email) {
this.email = email;
}

public String getRememberUP() {
return rememberUP;
}

public void setRememberUP(String rememberUP) {
this.rememberUP = rememberUP;
}

public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}

}

补充由于自己添加了两个Action方法所以需要在相关xml文件里面增加代码:

<action name="sendemail" class="com.xerxes.action.UsersAction" method="sendemail">
<result name="input">/WEB-INF/page/login.jsp</result>
<result name="login">/WEB-INF/page/login.jsp</result>
</action>
<action name="resetpassword" class="com.xerxes.action.UsersAction" method="resetpassword">
<result name="input">/WEB-INF/page/login.jsp</result>
<result name="login">/WEB-INF/page/login.jsp</result>
</action>

0 0
原创粉丝点击