首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

java 帐号激活与忘掉密码 实例

2012-09-21 
java帐号激活与忘记密码 实例?分类:?JavaMail?JavaEE2012-07-08 23:44?158人阅读?评论(0)?收藏?举报一、帐

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

?

分类:?JavaMail?JavaEE2012-07-08 23:44?158人阅读?评论(0)?收藏?举报

一、帐户激活

? ? ? ? ??在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将帐户激活,可能在使用网站的某些功能时就会受到限制,比如不能发贴、下载资料、评论等限制。这么做的原因应该是为了保证帐户的安全性和邮箱的有效性,以后网站如果有什么活动、资讯或系统安全通知等,可以在第一时间通知到用户。比如我在奇艺视频网站注册一个帐号之后,它就会往我注册时填写的邮箱中发一封帐户激活的邮件,邮件中有一个激活的链接,点击它就可以将你的帐户激活。如下图所示:

java  帐号激活与忘掉密码 实例

这个功能是怎么做到的呢,其实实现也是很简单的,说白了就是一个Update操作。

实现思路:当一个用户注册成功之后,系统向用户注册时提供的email地址发送一封邮件,邮件的内容是一个激活帐户的链接和一段简短的文字描述,这个链接的功能就是将这个帐户的状态修改成激活状态。这个功能的重点在于如何生成这个激活帐户的链接。直接可以联想到的方法就是建一个Servlet,Servlet接收一个用户名参数,Servlet拿到用户名参数之后,到数据库把这条记录load出来,做一次update操作即可。但是这样做会有风险,比如有人想在你的网站上搞破坏,注册时他填的email地址就是乱填的,这个Email地址可能根据就收不到邮件(但符合email格式),注册完成之后,然后在浏览器地址栏输入网站之前发送的帐户激活链接,并加上新注册的用户名参数,这样一来就跳过了去邮箱激活的步聚,时间久了,库中可能会留下许多无效的email地址和帐户。为了避免这个问题,解决方案是在用户注册成功之后,在发送激活帐户的链接中加一个随机码,这个随机码是将用户名和一个随机数用md5加密后的一串16进制字符串,每次用户在激活帐户的时候,都验证这个随机码是否和注册时发送的一致,这样就可以避免人为的修改激活链接达到帐户激活的功能。


二、忘记密码

? ? ? ? ??当你在某网站注册一个帐户之后,发现这个帐户很久没用了,密码也忘记了,如果还记得之前注册时填写的Email,那就可以向你的email中发一个重设密码的链接,就可以重新设置你的密码。大部份网站一般都提供了根据Email找回密码的功能。实现此功能的思路:在登录界面添加一个“忘记密码“的链接,用户点击进去之后,输入用户名或Email,系统根据用户名或Email找出用户信息,并生成一个重新设置密码的链接发送到用户的邮箱中(生成链接的方式和生成帐户激活链接的方式一样),用户在邮箱中点击重设密码的链接,根据提示进入密码重设页面,重新输入新的密码即可。

功能实现步聚(帐号激活):

1、用户注册页面

?

[html]?view plaincopy
  1. <form?action="${pageContext.request.contextPath}/register"?method="post">??
  2. ????用户名:<input?type="text"?name="userName"?value="${param.userName}"><span?class="error">${errors.userName}</span><br/>??
  3. ????密码:<input?type="password"?name="password"?><span?class="error">${errors.password}</span><br/>??
  4. ????确认密码:<input?type="password"?name="password2"><span?class="error">${errors.password2}</span><br/>??
  5. ????email:<input?type="text"?name="email"?value="${param.email}"><span?class="error">${errors.email}</span><br/>??
  6. ????<input?type="submit"?value="注册">??
  7. </form>??

?

2、处理注册请求的Servlet(RegisterServlet)

?

[java]?view plaincopy
  1. package?org.study.accountactivate.web.servlet;??
  2. ??
  3. import?java.io.IOException;??
  4. import?java.util.HashMap;??
  5. import?java.util.Map;??
  6. ??
  7. import?javax.servlet.ServletException;??
  8. import?javax.servlet.http.HttpServlet;??
  9. import?javax.servlet.http.HttpServletRequest;??
  10. import?javax.servlet.http.HttpServletResponse;??
  11. ??
  12. import?org.study.accountactivate.dao.UserDao;??
  13. import?org.study.accountactivate.dao.impl.UserDaoImpl;??
  14. import?org.study.accountactivate.domail.User;??
  15. import?org.study.accountactivate.util.EmailUtils;??
  16. ??
  17. /**?
  18. ?*?用户注册?
  19. ?*/??
  20. public?class?RegisterServlet?extends?HttpServlet?{??
  21. ????private?static?final?long?serialVersionUID?=?1L;??
  22. ??????
  23. ????private?UserDao?userDao?=?UserDaoImpl.getInstance();??
  24. ?????????
  25. ????protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  26. ????????doPost(request,?response);??
  27. ????}??
  28. ??
  29. ????protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  30. ????????String?userName?=?request.getParameter("userName");??
  31. ????????String?password?=?request.getParameter("password");??
  32. ????????String?password2?=?request.getParameter("password2");??
  33. ????????String?email?=?request.getParameter("email");??
  34. ??????????
  35. ????????Map<String,?String>?errors?=?new?HashMap<String,String>();??
  36. ????????if?(userName?==?null?||?"".equals(userName))?{??
  37. ????????????errors.put("userName",?"用户名不能为空!");??
  38. ????????}?else?if?(userName?!=?null?&&?userDao.findUserByName(userName)?!=?null)?{??
  39. ????????????errors.put("userName",?"该用户已注册!");??
  40. ????????}??
  41. ??????????
  42. ????????if?(password?==?null?||?"".equals(password))?{??
  43. ????????????errors.put("password","密码不能为空!");??
  44. ????????}?else?if?(password?!=?null?&&?password.length()?<?3)?{??
  45. ????????????errors.put("password","密码长度不能低于3位!");??
  46. ????????}??
  47. ??????????
  48. ????????if?(password2?==?null?||?"".equals(password2))?{??
  49. ????????????errors.put("password2",?"确认密码不能为空!");??
  50. ????????}?else?if?(password2?!=?null?&&?!password2.equals(password))?{??
  51. ????????????errors.put("password2",?"两次输入的密码不一致!");??
  52. ????????}??
  53. ??????????
  54. ????????if?(email?==?null?||?"".equals(email))?{??
  55. ????????????errors.put("email",?"email不能为空!");??
  56. ??????????????
  57. ????????}?else?if?(email?!=?null?&&?!email.matches("[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+\\.[0-9a-zA-Z_-]+(\\.[0-9a-zA-Z_-])*"))?{??
  58. ????????????errors.put("email",?"email格式不正确!");??
  59. ????????}??
  60. ??????????
  61. ????????if?(!errors.isEmpty())?{??
  62. ????????????request.setAttribute("errors",?errors);??
  63. ????????????request.getRequestDispatcher("/registerUI").forward(request,?response);??
  64. ????????????return;??
  65. ????????}??
  66. ??????????
  67. ????????User?user?=?new?User();??
  68. ????????user.setUserName(userName);??
  69. ????????user.setPassword(password);??
  70. ????????user.setEmail(email);??
  71. ????????user.setActivated(false);??
  72. ??????????
  73. ????????userDao.addUser(user);??
  74. ??????????
  75. ????????//?注册成功后,发送帐户激活链接??
  76. ????????EmailUtils.sendAccountActivateEmail(user);??
  77. ??????????
  78. ????????//?注册成功直接将当前用户保存到session中??
  79. ????????request.getSession().setAttribute("user",?user);??
  80. ????????request.getRequestDispatcher("/WEB-INF/pages/registerSuccess.jsp").forward(request,response);??
  81. ????}??
  82. }??

?

?

3、激活帐户的Servlet(ActivateAccountServle)

?

[java]?view plaincopy
  1. package?org.study.accountactivate.web.servlet;??
  2. ??
  3. import?java.io.IOException;??
  4. import?javax.servlet.ServletException;??
  5. import?javax.servlet.http.HttpServlet;??
  6. import?javax.servlet.http.HttpServletRequest;??
  7. import?javax.servlet.http.HttpServletResponse;??
  8. ??
  9. import?org.study.accountactivate.dao.UserDao;??
  10. import?org.study.accountactivate.dao.impl.UserDaoImpl;??
  11. import?org.study.accountactivate.domail.User;??
  12. import?org.study.accountactivate.util.GenerateLinkUtils;??
  13. ??
  14. /**?
  15. ?*?帐户激活?
  16. ?*/??
  17. public?class?ActivateAccountServlet?extends?HttpServlet?{??
  18. ????private?static?final?long?serialVersionUID?=?1L;??
  19. ?????????
  20. ????protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  21. ????????String?idValue?=?request.getParameter("id");??
  22. ????????int?id?=?-1;??
  23. ????????try?{??
  24. ????????????id?=?Integer.parseInt(idValue);??
  25. ????????}?catch?(NumberFormatException?e)?{??
  26. ????????????throw?new?RuntimeException("无效的用户!");??
  27. ????????}??
  28. ????????UserDao?userDao?=?UserDaoImpl.getInstance();??
  29. ????????User?user?=?userDao.findUserById(id);//?得到要激活的帐户??
  30. ????????user.setActivated(GenerateLinkUtils.verifyCheckcode(user,?request));//?校验验证码是否和注册时发送的一致,以此设置是否激活该帐户??
  31. ????????userDao.updateUser(user);??
  32. ??????????
  33. ????????request.getSession().setAttribute("user",?user);??
  34. ??????????
  35. ????????request.getRequestDispatcher("/accountActivateUI").forward(request,?response);??
  36. ????}??
  37. ??
  38. ????protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  39. ????????doGet(request,?response);??
  40. ????}??
  41. }??
4、操作用户的DAO接口与实现类(UserDao和UserDaoImpl类)

?

[java]?view plaincopy
  1. package?org.study.accountactivate.dao;??
  2. ??
  3. import?org.study.accountactivate.domail.User;??
  4. ??
  5. public?interface?UserDao?{??
  6. ??
  7. ????void?addUser(User?user);??
  8. ??????
  9. ????void?updateUser(User?user);??
  10. ??????
  11. ????User?findUserById(int?id);??
  12. ??????
  13. ????User?findUserByName(String?userName);??
  14. ??????
  15. ????User?findUserByNameOrEmail(String?nameOrEmail);??
  16. }??
  17. ??
  18. package?org.study.accountactivate.dao.impl;??
  19. ??
  20. import?java.util.Collection;??
  21. import?java.util.HashMap;??
  22. import?java.util.Iterator;??
  23. import?java.util.Map;??
  24. import?java.util.UUID;??
  25. ??
  26. import?org.study.accountactivate.dao.UserDao;??
  27. import?org.study.accountactivate.domail.User;??
  28. ??
  29. public?class?UserDaoImpl?implements?UserDao?{??
  30. ??????
  31. ????private?static?UserDaoImpl?instance?=?new?UserDaoImpl();??
  32. ??????
  33. ????private?UserDaoImpl()?{}??
  34. ??????
  35. ????public?static?UserDaoImpl?getInstance()?{??
  36. ????????return?instance;??
  37. ????}??
  38. ??????
  39. ????Map<Integer,User>?users?=?new?HashMap<Integer,?User>();??
  40. ??????
  41. ????int?nextId?=?1;??
  42. ??
  43. ????@Override??
  44. ????public?void?addUser(User?user)?{??
  45. ????????user.setId(nextId++);??
  46. ????????user.setRandomCode(UUID.randomUUID().toString());??
  47. ????????users.put(user.getId(),?user);??
  48. ????}??
  49. ??
  50. ????@Override??
  51. ????public?void?updateUser(User?user)?{??
  52. ????????users.put(user.getId(),?user);??
  53. ????}??
  54. ??
  55. ????@Override??
  56. ????public?User?findUserById(int?id)?{??
  57. ????????return?users.get(id);??
  58. ????}??
  59. ??
  60. ????@Override??
  61. ????public?User?findUserByName(String?userName)?{??
  62. ????????Collection<User>?userValues?=?users.values();??
  63. ????????for?(Iterator<User>?iterator?=?userValues.iterator();iterator.hasNext();)?{??
  64. ????????????User?user?=?iterator.next();??
  65. ????????????if?(user.getUserName().equals(userName))?{??
  66. ????????????????return?user;??
  67. ????????????}??
  68. ????????}??
  69. ????????return?null;??
  70. ????}??
  71. ??
  72. ????@Override??
  73. ????public?User?findUserByNameOrEmail(String?nameOrEmail)?{??
  74. ????????Collection<User>?userValues?=?users.values();??
  75. ????????for(Iterator<User>?iterator?=?userValues.iterator();iterator.hasNext();)?{??
  76. ????????????User?user?=?iterator.next();??
  77. ????????????if?(user.getEmail().equals(nameOrEmail)?||?user.getUserName().equals(nameOrEmail))?{??
  78. ????????????????return?user;??
  79. ????????????}??
  80. ????????}??
  81. ????????return?null;??
  82. ????}??
  83. }??
5、发送Email的工具类(EmailUtils,用于发送帐户激活链接和密码重置链接)

?

?

[java]?view plaincopy
  1. package?org.study.accountactivate.util;??
  2. ??
  3. import?java.io.IOException;??
  4. import?java.io.InputStream;??
  5. import?java.util.Date;??
  6. import?java.util.Properties;??
  7. ??
  8. import?javax.mail.Authenticator;??
  9. import?javax.mail.Message.RecipientType;??
  10. import?javax.mail.PasswordAuthentication;??
  11. import?javax.mail.Session;??
  12. import?javax.mail.Transport;??
  13. import?javax.mail.internet.InternetAddress;??
  14. import?javax.mail.internet.MimeMessage;??
  15. ??
  16. import?org.study.accountactivate.domail.User;??
  17. ??
  18. public?class?EmailUtils?{??
  19. ??????
  20. ????private?static?final?String?FROM?=?"xyang81@163.com";??
  21. ??
  22. ????/**?
  23. ?????*?注册成功后,向用户发送帐户激活链接的邮件?
  24. ?????*?@param?user?未激活的用户?
  25. ?????*/??
  26. ????public?static?void?sendAccountActivateEmail(User?user)?{??
  27. ????????Session?session?=?getSession();??
  28. ????????MimeMessage?message?=?new?MimeMessage(session);??
  29. ????????try?{??
  30. ????????????message.setSubject("帐户激活邮件");??
  31. ????????????message.setSentDate(new?Date());??
  32. ????????????message.setFrom(new?InternetAddress(FROM));??
  33. ????????????message.setRecipient(RecipientType.TO,?new?InternetAddress(user.getEmail()));??
  34. ????????????message.setContent("<a?href='"?+?GenerateLinkUtils.generateActivateLink(user)+"'>点击激活帐户</a>","text/html;charset=utf-8");??
  35. ????????????//?发送邮件??
  36. ????????????Transport.send(message);??
  37. ????????}?catch?(Exception?e)?{??
  38. ????????????e.printStackTrace();??
  39. ????????}??
  40. ????}??
  41. ??????
  42. ????/**?
  43. ?????*?发送重设密码链接的邮件?
  44. ?????*/??
  45. ????public?static?void?sendResetPasswordEmail(User?user)?{??
  46. ????????Session?session?=?getSession();??
  47. ????????MimeMessage?message?=?new?MimeMessage(session);??
  48. ????????try?{??
  49. ????????????message.setSubject("找回您的帐户与密码");??
  50. ????????????message.setSentDate(new?Date());??
  51. ????????????message.setFrom(new?InternetAddress(FROM));??
  52. ????????????message.setRecipient(RecipientType.TO,?new?InternetAddress(user.getEmail()));??
  53. ????????????message.setContent("要使用新的密码,?请使用以下链接启用密码:<br/><a?href='"?+?GenerateLinkUtils.generateResetPwdLink(user)?+"'>点击重新设置密码</a>","text/html;charset=utf-8");??
  54. ????????????//?发送邮件??
  55. ????????????Transport.send(message);??
  56. ????????}?catch?(Exception?e)?{??
  57. ????????????e.printStackTrace();??
  58. ????????}??
  59. ????}??
  60. ??????
  61. ????public?static?Session?getSession()?{??
  62. ????????Properties?props?=?new?Properties();??
  63. ????????props.setProperty("mail.transport.protocol",?"smtp");??
  64. ????????props.setProperty("mail.smtp.host",?"smtp.163.com");??
  65. ????????props.setProperty("mail.smtp.port",?"25");??
  66. ????????props.setProperty("mail.smtp.auth",?"true");??
  67. ????????Session?session?=?Session.getInstance(props,?new?Authenticator()?{??
  68. ????????????@Override??
  69. ????????????protected?PasswordAuthentication?getPasswordAuthentication()?{??
  70. ????????????????String?password?=?null;??
  71. ????????????????InputStream?is?=?EmailUtils.class.getResourceAsStream("password.dat");??
  72. ????????????????byte[]?b?=?new?byte[1024];??
  73. ????????????????try?{??
  74. ????????????????????int?len?=?is.read(b);??
  75. ????????????????????password?=?new?String(b,0,len);??
  76. ????????????????}?catch?(IOException?e)?{??
  77. ????????????????????e.printStackTrace();??
  78. ????????????????}??
  79. ????????????????return?new?PasswordAuthentication(FROM,?password);??
  80. ????????????}??
  81. ??????????????
  82. ????????});??
  83. ????????return?session;??
  84. ????}??
  85. }??

?

6、生成帐户激活、密码重设链接的工具类(GenerateLinkUtils)

[java]?view plaincopy
  1. package?org.study.accountactivate.util;??
  2. ??
  3. import?java.security.MessageDigest;??
  4. import?java.security.NoSuchAlgorithmException;??
  5. ??
  6. import?javax.servlet.ServletRequest;??
  7. ??
  8. import?org.study.accountactivate.domail.User;??
  9. ??
  10. /**?
  11. ?*?生成帐户激活、重新设置密码的链接?
  12. ?*/??
  13. public?class?GenerateLinkUtils?{??
  14. ??????
  15. ????private?static?final?String?CHECK_CODE?=?"checkCode";??
  16. ??????
  17. ????/**?
  18. ?????*?生成帐户激活链接?
  19. ?????*/??
  20. ????public?static?String?generateActivateLink(User?user)?{??
  21. ????????return?"http://localhost:8080/AccountActivate/activateAccount?id="???
  22. ????????????????+?user.getId()?+?"&"?+?CHECK_CODE?+?"="?+?generateCheckcode(user);??
  23. ????}??
  24. ??????
  25. ????/**?
  26. ?????*?生成重设密码的链接?
  27. ?????*/??
  28. ????public?static?String?generateResetPwdLink(User?user)?{??
  29. ????????return?"http://localhost:8080/AccountActivate/resetPasswordUI?userName="???
  30. ????????????????+?user.getUserName()?+?"&"?+?CHECK_CODE?+?"="?+?generateCheckcode(user);??
  31. ????}??
  32. ??????
  33. ????/**?
  34. ?????*?生成验证帐户的MD5校验码?
  35. ?????*?@param?user??要激活的帐户?
  36. ?????*?@return?将用户名和密码组合后,通过md5加密后的16进制格式的字符串?
  37. ?????*/??
  38. ????public?static?String?generateCheckcode(User?user)?{??
  39. ????????String?userName?=?user.getUserName();??
  40. ????????String?randomCode?=?user.getRandomCode();??
  41. ????????return?md5(userName?+?":"?+?randomCode);??
  42. ????}??
  43. ??????
  44. ????/**?
  45. ?????*?验证校验码是否和注册时发送的验证码一致?
  46. ?????*?@param?user?要激活的帐户?
  47. ?????*?@param?checkcode?注册时发送的校验码?
  48. ?????*?@return?如果一致返回true,否则返回false?
  49. ?????*/??
  50. ????public?static?boolean?verifyCheckcode(User?user,ServletRequest?request)?{??
  51. ????????String?checkCode?=?request.getParameter(CHECK_CODE);??
  52. ????????return?generateCheckcode(user).equals(checkCode);??
  53. ????}??
  54. ??
  55. ????private?static?String?md5(String?string)?{??
  56. ????????MessageDigest?md?=?null;??
  57. ????????try?{??
  58. ????????????md?=?MessageDigest.getInstance("md5");??
  59. ????????????md.update(string.getBytes());??
  60. ????????????byte[]?md5Bytes?=?md.digest();??
  61. ????????????return?bytes2Hex(md5Bytes);??
  62. ????????}?catch?(NoSuchAlgorithmException?e)?{??
  63. ????????????e.printStackTrace();??
  64. ????????}??
  65. ??????????
  66. ????????return?null;??
  67. ????}??
  68. ??????
  69. ????private?static?String?bytes2Hex(byte[]?byteArray)??
  70. ????{??
  71. ????????StringBuffer?strBuf?=?new?StringBuffer();??
  72. ????????for?(int?i?=?0;?i?<?byteArray.length;?i++)??
  73. ????????{??
  74. ????????????if(byteArray[i]?>=?0?&&?byteArray[i]?<?16)??
  75. ????????????{??
  76. ????????????????strBuf.append("0");??
  77. ????????????}??
  78. ????????????strBuf.append(Integer.toHexString(byteArray[i]?&?0xFF));??
  79. ????????}??
  80. ????????return?strBuf.toString();??
  81. ????}??
  82. }??

7、实体类(User)

?

[java]?view plaincopy
  1. package?org.study.accountactivate.domail;??
  2. ??
  3. public?class?User?{??
  4. ????//?编号??
  5. ????private?int?id;??
  6. ????//?用户名??
  7. ????private?String?userName;??
  8. ????//?密码??
  9. ????private?String?password;??
  10. ????//?email??
  11. ????private?String?email;??
  12. ????//?是否激活??
  13. ????private?boolean?activated;??
  14. ????//?随机码(激活帐户与生成重设密码链接时使用)??
  15. ????private?String?randomCode;??
  16. ??????
  17. ????public?int?getId()?{??
  18. ????????return?id;??
  19. ????}??
  20. ????public?void?setId(int?id)?{??
  21. ????????this.id?=?id;??
  22. ????}??
  23. ????public?String?getUserName()?{??
  24. ????????return?userName;??
  25. ????}??
  26. ????public?void?setUserName(String?userName)?{??
  27. ????????this.userName?=?userName;??
  28. ????}??
  29. ????public?String?getPassword()?{??
  30. ????????return?password;??
  31. ????}??
  32. ????public?void?setPassword(String?password)?{??
  33. ????????this.password?=?password;??
  34. ????}??
  35. ????public?boolean?isActivated()?{??
  36. ????????return?activated;??
  37. ????}??
  38. ????public?void?setActivated(boolean?activated)?{??
  39. ????????this.activated?=?activated;??
  40. ????}??
  41. ????public?String?getRandomCode()?{??
  42. ????????return?randomCode;??
  43. ????}??
  44. ????public?void?setRandomCode(String?randomCode)?{??
  45. ????????this.randomCode?=?randomCode;??
  46. ????}??
  47. ????public?String?getEmail()?{??
  48. ????????return?email;??
  49. ????}??
  50. ????public?void?setEmail(String?email)?{??
  51. ????????this.email?=?email;??
  52. ????}??
  53. ??
  54. }??

?

功能实现步骤(忘记密码):

1、登录页面

?

[html]?view plaincopy
  1. <form?action="${pageContext.request.contextPath}/login"?method="post">??
  2. ????<span?class="error"?style="display:?block;">${errors.loginError}</span>??
  3. ????用户名:<input?type="text"?name="userName"?value="${param.userName}"><span?class="error">${errors.userName}</span><br/>??
  4. ????密码:<input?type="password"?name="password"><span?class="error">${errors.password}</span><br/>??
  5. ????<input?type="submit"?value="登录">???
  6. ????<a?href="${pageContext.request.contextPath}/forgotPwdUI">忘记密码?</a>???
  7. ????<a?href="${pageContext.request.contextPath}/registerUI">注册</a>??
  8. </form>??

?

2、发送重设密码申请的页面

?

[html]?view plaincopy
  1. <form?action="${pageContext.request.contextPath}/forgotPwd"?method="post">??
  2. ????<span?style="color:?red">${requestScope.sendMailMsg}</span>??
  3. ????用户名/邮箱:<input?type="text"?name="userNameOrEmail"?/><span?style="color:?red">${requestScope.errorMsg}</span><br/>??
  4. ????<input?type="submit"?value="提交"?/><a?href=""></a>??
  5. </form>??

?

3、处理“发送重设密码链接“请求的Servlet(ForgotPwdServlet)

?

[java]?view plaincopy
  1. package?org.study.accountactivate.web.servlet;??
  2. ??
  3. import?java.io.IOException;??
  4. import?javax.servlet.ServletException;??
  5. import?javax.servlet.http.HttpServlet;??
  6. import?javax.servlet.http.HttpServletRequest;??
  7. import?javax.servlet.http.HttpServletResponse;??
  8. ??
  9. import?org.study.accountactivate.dao.UserDao;??
  10. import?org.study.accountactivate.dao.impl.UserDaoImpl;??
  11. import?org.study.accountactivate.domail.User;??
  12. import?org.study.accountactivate.util.EmailUtils;??
  13. ??
  14. /**?
  15. ?*?发送重设密码申请的链接?
  16. ?*/??
  17. public?class?ForgotPwdServlet?extends?HttpServlet?{??
  18. ??????
  19. ????private?static?final?long?serialVersionUID?=?1L;??
  20. ??
  21. ????protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  22. ????????String?userNameOrEmail?=?request.getParameter("userNameOrEmail");??
  23. ????????UserDao?userDao?=?UserDaoImpl.getInstance();??
  24. ????????User?user?=?userDao.findUserByNameOrEmail(userNameOrEmail);??
  25. ????????if?(user?==?null)?{??
  26. ????????????request.setAttribute("errorMsg",?userNameOrEmail?+?",不存在!");??
  27. ????????????request.getRequestDispatcher("/forgotPwdUI").forward(request,?response);??
  28. ????????????return;??
  29. ????????}??
  30. ??????????
  31. ????????//?发送重新设置密码的链接??
  32. ????????EmailUtils.sendResetPasswordEmail(user);??
  33. ??????????
  34. ????????request.setAttribute("sendMailMsg",?"您的申请已提交成功,请查看您的"+user.getEmail()+"邮箱。");??
  35. ??????????
  36. ????????request.getRequestDispatcher("/WEB-INF/pages/forgotPwdSuccess.jsp").forward(request,?response);??
  37. ????}??
  38. ??
  39. ????protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  40. ????????doGet(request,?response);??
  41. ????}??
  42. }??
4、重新设置密码的页面

?

[html]?view plaincopy
  1. <form?action="${pageContext.request.contextPath}/resetPassword"?method="post">??
  2. ????<span?class="error"?style="display:?block;">${errors.passwordError}</span>??
  3. ????用户名:<input?type="text"?name="userName"?value="${userName}"?readonly="readonly"/><br/>??
  4. ????新密码:<input?type="password"?name="newPassword"?/><span?class="error">${errors.newPassword?}</span><br/>??
  5. ????确认新密码:<input?type="password"?name="newPassword2"/><span?class="error">${errors.newPassword2?}</span><br/>??
  6. ????<input?type="submit"?value="修改"?/>??
  7. </form>??
5、处理重新设置密码请求的Servlet(ResetPasswordServlet)
[java]?view plaincopy
  1. package?org.study.accountactivate.web.servlet;??
  2. ??
  3. import?java.io.IOException;??
  4. import?java.util.HashMap;??
  5. import?java.util.Map;??
  6. ??
  7. import?javax.servlet.ServletException;??
  8. import?javax.servlet.http.HttpServlet;??
  9. import?javax.servlet.http.HttpServletRequest;??
  10. import?javax.servlet.http.HttpServletResponse;??
  11. ??
  12. import?org.study.accountactivate.dao.UserDao;??
  13. import?org.study.accountactivate.dao.impl.UserDaoImpl;??
  14. import?org.study.accountactivate.domail.User;??
  15. ??
  16. /**?
  17. ?*?重新设置密码?
  18. ?*/??
  19. public?class?ResetPasswordServlet?extends?HttpServlet?{??
  20. ????private?static?final?long?serialVersionUID?=?1L;??
  21. ?????????
  22. ????protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  23. ????????String?userName?=?request.getParameter("userName");??
  24. ????????String?newPassword?=?request.getParameter("newPassword");??
  25. ????????String?newPassword2?=?request.getParameter("newPassword2");??
  26. ????????Map<String,String>?errors?=?new?HashMap<String,?String>();??
  27. ????????if?(newPassword?==?null?||?"".equals(newPassword))?{??
  28. ????????????errors.put("newPassword",?"新密码不能为空!");??
  29. ????????}??
  30. ??????????
  31. ????????if?(newPassword2?==?null?||?"".equals(newPassword2))?{??
  32. ????????????errors.put("newPassword2",?"确认新密码不能为空!");??
  33. ????????}??
  34. ??????????
  35. ????????if?(!newPassword.equals(newPassword2))?{??
  36. ????????????errors.put("passwordError",?"两次输入的密码不一致!");??
  37. ????????}??
  38. ??????????
  39. ????????if?(!errors.isEmpty())?{??
  40. ????????????request.setAttribute("errors",?errors);??
  41. ????????????request.getRequestDispatcher("/resetPasswordUI?userName="?+?userName).forward(request,?response);??
  42. ????????????return;??
  43. ????????}??
  44. ??????????
  45. ????????UserDao?userDao?=?UserDaoImpl.getInstance();??
  46. ????????User?user?=?userDao.findUserByName(userName);??
  47. ????????user.setPassword(newPassword);??
  48. ??????????
  49. ????????request.getRequestDispatcher("/WEB-INF/pages/resetPasswordSuccess.jsp").forward(request,?response);??
  50. ??????????
  51. ????}??
  52. ??
  53. ????protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{??
  54. ????????doGet(request,?response);??
  55. ????}??
  56. }??

?

帐户激活操作流程:

1)、注册页面

java  帐号激活与忘掉密码 实例??

2)、注册成功页面

?java  帐号激活与忘掉密码 实例

3)、帐户未激活,登录后的界面

java  帐号激活与忘掉密码 实例

4)、前往邮箱中激活帐户

java  帐号激活与忘掉密码 实例

5)、激活成功

java  帐号激活与忘掉密码 实例

6)、帐户已激活,登录后的界面

java  帐号激活与忘掉密码 实例

?

忘记密码操作流程:

1)、登录页面(点击“忘记密码”链接,进入重设密码页面)

java  帐号激活与忘掉密码 实例

2、重设密码申请页面(输入用户名或邮箱,点击“提交”按钮)

java  帐号激活与忘掉密码 实例

3、重设密码申请成功页面

java  帐号激活与忘掉密码 实例

4、邮箱中重设密码的链接

java  帐号激活与忘掉密码 实例

5、重新设置密码页面

java  帐号激活与忘掉密码 实例

6、密码重新设置成功页面

java  帐号激活与忘掉密码 实例

热点排行