• 项目知识点总结-过滤器-MD5注册-邮箱登录


    (1)过滤器

    使用过滤器验证用户是否登录 

    1. /**
    2. * @Title: NoLoginFilter.java
    3. * @Package com.qfedu.web.filter
    4. * @Description: TODO(用一句话描述该文件做什么)
    5. * @author Feri
    6. * @date 2018年5月28日
    7. * @version V1.0
    8. */
    9. package com.gdsdxy.filter;
    10. import javax.servlet.*;
    11. import javax.servlet.annotation.WebFilter;
    12. import javax.servlet.http.HttpServletRequest;
    13. import javax.servlet.http.HttpServletResponse;
    14. import java.io.IOException;
    15. /**
    16. * @Title: NoLoginFilter.java
    17. * @Package com.qfedu.web.filter
    18. * @Description: TODO(用一句话描述该文件做什么)
    19. * @author Feri
    20. * @date 2018年5月28日
    21. * @version V1.0
    22. */
    23. @WebFilter("/*")
    24. public class NoLoginFilter implements Filter {
    25. private String[] urls= {"getCart","addCart","order.jsp","orderDetail.jsp","getDirectOrder","addOrder","addfavorites","getGoodsById"};
    26. /* */
    27. @Override
    28. public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
    29. throws IOException, ServletException {
    30. HttpServletRequest request=(HttpServletRequest) req;
    31. HttpServletResponse response=(HttpServletResponse) resp;
    32. String path=request.getServletPath();
    33. if(isHave(path)) {
    34. //需要进行登录拦截校验
    35. if(request.getSession().getAttribute("user")==null) {
    36. response.sendRedirect("login.jsp");
    37. }else {
    38. chain.doFilter(request, response);
    39. }
    40. }else {
    41. chain.doFilter(request, response);
    42. }
    43. }
    44. private boolean isHave(String path) {
    45. for(String u:urls) {
    46. if(path.contains(u)) {
    47. return true;
    48. }
    49. }
    50. return false;
    51. }
    52. @Override
    53. public void destroy() {
    54. // TODO Auto-generated method stub
    55. }
    56. @Override
    57. public void init(FilterConfig filterConfig) throws ServletException {
    58. // TODO Auto-generated method stub
    59. }
    60. }

    过滤器的配置:一是通过注解,二是通过web.xml中配置

    如@WebFilter("/*")就是拦截所有请求。 

    xml方式可以说是和Servlet使用xml配置方式一样

    1. myFilter
    2. com.clucky.filter.MyFilter
    3. myFilter
    4. /*

     Filter有3个阶段,分别是初始化,拦截和过滤,销毁。

            初始化阶段:当服务器启动时,我们的服务器(Tomcat)就会读取配置文件,扫描注解,然后来创建我们的Filter。
            拦截和过滤阶段:只要请求资源的路径和拦截的路径相同,那么过滤器就会对请求进行过滤,这个阶段在服务器运行过程中会一直循环。
            销毁阶段:当服务器(Tomcat)关闭时,服务器创建的Filter也会随之销毁

       FilterConfig和FilterChain这2个对象是由服务器(Tomcat)在创建和调用Filter对象时所传入的

    FilterConfig对象可以读取我们配置的初始参数,FilterChain可以实现多个Filter之间的连接。

     FilterConfig

    1. import javax.servlet.*;
    2. import java.io.IOException;
    3. import java.util.Enumeration;
    4. public class MyFilterConfig implements Filter {
    5. @Override
    6. public void init(FilterConfig filterConfig) throws ServletException {
    7. System.out.println("-----------获取全部key:value------------");
    8. //得到所有配置参数的名字
    9. Enumeration names = filterConfig.getInitParameterNames();
    10. while (names.hasMoreElements()) {
    11. //得到每一个名字
    12. String name = names.nextElement();
    13. System.out.println(name+" = "+filterConfig.getInitParameter(name));
    14. }
    15. System.out.println("-----------end.....------------");
    16. }
    17. @Override
    18. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    19. }
    20. @Override
    21. public void destroy() {
    22. }
    23. }

    xml: 

    1. myFilterConfig
    2. com.clucky.filter.MyFilterConfig
    3. driver
    4. com.mysql.jdbc.Driver
    5. url
    6. jdbc:mysql://localhost:3306/equip_employ_manage?serverTimezone=GMT
    7. username
    8. root
    9. password
    10. root
    11. myFilterConfig
    12. /*

     FilterChain

    第一个filter

    1. import javax.servlet.*;
    2. import javax.servlet.annotation.WebFilter;
    3. import java.io.IOException;
    4. @WebFilter("/*")
    5. public class Filter01 implements Filter {
    6. @Override
    7. public void init(FilterConfig filterConfig) throws ServletException {
    8. }
    9. @Override
    10. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    11. System.out.println("调用过滤器01对请求进行过滤~~~~");
    12. //放行,如果还有过滤器,那么就执行下一个过滤器
    13. filterChain.doFilter(servletRequest,servletResponse);
    14. System.out.println("调用过滤器01对响应进行过滤~~~~");
    15. }
    16. @Override
    17. public void destroy() {
    18. }
    19. }

    第二个Filter

    1. import javax.servlet.*;
    2. import javax.servlet.annotation.WebFilter;
    3. import java.io.IOException;
    4. @WebFilter("/*")
    5. public class Filter02 implements Filter {
    6. @Override
    7. public void init(FilterConfig filterConfig) throws ServletException {
    8. }
    9. @Override
    10. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    11. System.out.println("调用过滤器02对请求进行过滤~~~~");
    12. //放行,如果还有过滤器,那么就执行下一个过滤器
    13. filterChain.doFilter(servletRequest,servletResponse);
    14. System.out.println("调用过滤器02对响应进行过滤~~~~");
    15. }
    16. @Override
    17. public void destroy() {
    18. }
    19. }

        我们可以看见Filter01先进行过滤,然后交给Filter02,然后访问资源,然后Filter02对响应进行过滤,然后Filter01对响应进行过滤

    多个Filter的执行顺序
            上面我们配置了2个过滤器,那么我们怎么知道那个过滤器先执行呢?其实大家可以直接使用代码进行验证,培养独立思考的习惯,这里我就直接给出答案了。

           如果我们是在web.xml中配置的过滤器,那么过滤器的执行顺序就是在web配置的顺序,配置在上面那么就会先执行。
           如果我们是使用@WebFilter进行配置的,那么执行顺序就是字符比较顺序来执行,例如有2个过滤器,一个是AFilter,一个是BFilter,那么AFilter就会先执行。
          如果注解和xml混用,那么在web.xml中配置的会先执行。
     

    (2)用户注册-密码使用MD5加密

    工具类:生成自定义数字 

    1. package com.gdsdxy.common.utils;
    2. import java.text.SimpleDateFormat;
    3. import java.util.Calendar;
    4. import java.util.Random;
    5. import java.util.UUID;
    6. //随机数
    7. public class RandomUtils {
    8. //生成激活码
    9. public static String createActive(){
    10. return getTime()+Integer.toHexString(new Random().nextInt(900)+100);
    11. }
    12. //设置时间戳
    13. public static String getTime(){
    14. return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime());
    15. }
    16. //生成订单编号
    17. public static String createOrderId(){
    18. return getTime()+UUID.randomUUID().toString();
    19. }
    20. }

    工具类:密码加密

    1. package com.gdsdxy.common.utils;
    2. import java.math.BigInteger;
    3. import java.security.MessageDigest;
    4. import java.security.NoSuchAlgorithmException;
    5. //MD5 摘要算法 签名或者简易加解密
    6. public class MD5Utils {
    7. public static String md5(String password){
    8. try {
    9. //获取摘要对象
    10. MessageDigest md = MessageDigest.getInstance("MD5");
    11. //设置要签名的内容
    12. md.update(password.getBytes());
    13. //获取摘要结果
    14. return new BigInteger(1, md.digest()).toString(16);
    15. } catch (NoSuchAlgorithmException e) {
    16. // TODO Auto-generated catch block
    17. e.printStackTrace();
    18. }
    19. return null;
    20. }
    21. }

     工具类:邮箱编码、解码

    1. package com.gdsdxy.common.utils;
    2. import java.util.Base64;
    3. /**
    4. * 基于JDK1.8实现的BASE64编码
    5. * 编码
    6. * 解码*/
    7. public class Base64Utils {
    8. //编码
    9. public static String encode(String msg){
    10. return Base64.getEncoder().encodeToString(msg.getBytes());
    11. }
    12. //解码
    13. public static String decode(String msg){
    14. return new String(Base64.getDecoder().decode(msg));
    15. }
    16. }

    Controller: :

    创建激活码,创建它给对象的属性赋值,下面利用它作为条件查询,激活对象

    上传的图片:用MultipartFile  file接收,然后创建file desfile对象:再通过接口的file对象file.transferTo(创建的desfile对象)进行图片的存储

    1. // 注册
    2. @RequestMapping("userregister")
    3. public String register(User user, Model model, HttpSession session, HttpServletRequest request, MultipartFile file) throws IOException {
    4. // 创建激活码
    5. String acode = RandomUtils.createActive();
    6. user.setActivatecode(acode);
    7. String fn = FileUtils.createFileName(file.getOriginalFilename());
    8. File desfile = new File("C:\\hitech\\src\\main\\webapp\\image", fn);
    9. file.transferTo(desfile);
    10. user.setPicture(fn);
    11. if (userService.save(user)) {
    12. // 新增成功
    13. session.setAttribute("acode", acode);
    14. // 发送激活码
    15. EmailUtils.sendEmail(user);
    16. request.setAttribute("email",user.getEmail());
    17. request.setAttribute("zt", "会员注册");
    18. request.setAttribute("ts", "注册成功 别忘记激活!");
    19. return "registerSuccess";
    20. } else {
    21. model.addAttribute("registerMsg", "服务器开小差,请稍后再来");
    22. return "register";
    23. }
    24. }

    UserService: 

    实现类:

    Dao:

    1. //新增
    2. @Insert("insert into t_user(role ,username,password,email,gender,createtime ,flag ,activatecode,picture) values(1,#{username},#{password},#{email},#{gender},now(),1,#{activatecode},#{picture})")
    3. int insert(User user);
    EmailUtils.sendEmail(user);

    EmailUtils :发送邮件,进行激活用户 

    1. package com.gdsdxy.common.utils;
    2. import com.gdsdxy.domain.User;
    3. import javax.mail.MessagingException;
    4. import javax.mail.Session;
    5. import javax.mail.Transport;
    6. import javax.mail.internet.InternetAddress;
    7. import javax.mail.internet.MimeMessage;
    8. import java.io.UnsupportedEncodingException;
    9. import java.net.Inet4Address;
    10. import java.net.UnknownHostException;
    11. import java.util.Date;
    12. import java.util.Properties;
    13. /*
    14. * 基于JDK实现邮件发送
    15. * 主要是实现激活码的发送
    16. * */
    17. public class EmailUtils {
    18. public static void sendEmail(User user){
    19. //邮箱
    20. String myAccount = "lx_teach@163.com";
    21. //授权码
    22. String myPass = "java168";
    23. //邮箱服务器
    24. String SMTPHost = "smtp.163.com";
    25. //设置属性信息
    26. Properties prop = new Properties();
    27. //设置协议
    28. prop.setProperty("mail.transport.protocol", "smtp");
    29. //邮件服务器
    30. prop.setProperty("mail.smtp.host", SMTPHost);
    31. //认证
    32. prop.setProperty("mail.smtp.auth", "true");
    33. //1、创建会话
    34. Session session = Session.getDefaultInstance(prop);
    35. //设置是否需要调试
    36. session.setDebug(false);
    37. //2、创建发送信息
    38. MimeMessage message = createMsg(session,myAccount,user);
    39. //4发送信息操作
    40. try {
    41. Transport tran = session.getTransport();
    42. //连接
    43. tran.connect(myAccount, myPass);
    44. //发送消息
    45. tran.sendMessage(message, message.getAllRecipients());
    46. //关闭
    47. tran.close();
    48. } catch (MessagingException e) {
    49. // TODO Auto-generated catch block
    50. e.printStackTrace();
    51. }
    52. }
    53. //生成邮件消息
    54. private static MimeMessage createMsg(Session session, String myAccount, User user) {
    55. //创建消息对象
    56. MimeMessage message = new MimeMessage(session);
    57. //设置
    58. try {
    59. //3.1发送方
    60. message.setFrom(new InternetAddress(myAccount, "HITECH官方邮件", "utf-8"));
    61. //3.2设置接收方
    62. /*
    63. * MimeMessage.RecipientType.TO
    64. * MimeMessage.RecipientType.CC
    65. * MimeMessage.RecipientType.BCC
    66. * */
    67. message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail(), user.getUsername(), "utf-8"));
    68. //3.3 设置主题
    69. message.setSubject("HITECH激活码","utf-8");
    70. //获取本机的ip地址
    71. String ip = Inet4Address.getLocalHost().getHostAddress();
    72. String url = "http://localhost:8080/hitech_war/activate?e="+ Base64Utils.encode(user.getEmail())+"&c="+Base64Utils.encode(user.getActivatecode());
    73. //String url = "http://"+ip+":8080/fengmi_war/activate?e="+ Base64Utils.encode(user.getEmail())+"&c="+Base64Utils.encode(user.getActivatecode());
    74. //设置正文信息
    75. message.setContent(user.getUsername()+",欢迎你加入我们
      为了更好体验我们的产品,请点击激活"
      +url+"","text/html;charset=utf-8");
    76. //设置日期
    77. message.setSentDate(new Date());
    78. //保存
    79. message.saveChanges();
    80. } catch (UnsupportedEncodingException | MessagingException | UnknownHostException e) {
    81. // TODO Auto-generated catch block
    82. e.printStackTrace();
    83. }
    84. return message;
    85. }
    86. }

    UserService 

    实现类:

    Dao:

    1. //激活
    2. @Update("update t_user set flag=2 where email=#{email} and activatecode=#{code}")
    3. int updateAcode(@Param("email") String email, @Param("code") String code);

    (3)用户登录-普通登录-邮箱登录

    普通登录: 

    用户登录之后分配一个购物车到表里,然后存入session,之后购买时候用到,查看购物车的时候通过从session中获取这个购物车id进行查询。

    Controller: 

    1. // 登陆
    2. @RequestMapping("userlogin")
    3. public String login(String username, String password, Model model, HttpSession session) {
    4. if (!StrUtils.empty(username, password)) {
    5. User user = userService.getUserByName(username);
    6. if (user != null) {
    7. // 校验密码
    8. if (user.getPassword().equals(MD5Utils.md5(password))) {
    9. // 正确
    10. // 记录登录信息到会话中
    11. session.setAttribute("user", user);
    12. Cart cart = cartService.queryByUid(user.getId());
    13. if (cart == null) {
    14. cart = new Cart();
    15. cart.setUid(user.getId());
    16. cart.setMoney(0);
    17. cartService.createCart(cart);
    18. }
    19. session.setAttribute("cart", cartService.queryByUid(user.getId()));
    20. // 页面跳转
    21. return "index";
    22. }
    23. }
    24. }
    25. model.addAttribute("loginMsg", " 账号或密码错误!");
    26. return "login";
    27. }

    UserService:

    实现类: 

    UserDao:

    1. //登录 用户名或密码都可以使用
    2. @Select("select * from t_user where flag=2 and (username=#{name} or email=#{email})")
    3. @ResultType(User.class)
    4. User select(String name);

    user.getPassword().equals(MD5Utils.md5(password))   :通过从数据库加密的密码进行解码,对比

    登录成功后更具用户id进行查询是否含有购物车,创建一个购物车:

     Cart cart = cartService.queryByUid(user.getId());

    CartService: 

    实现类:

    CartDao:

    1. //获取用户的购物车
    2. @Select("select * from t_cart where uid=#{uid}")
    3. @ResultType(Cart.class)
    4. public Cart queryByUid(int uid);

     cartService.createCart(cart);

    CaartService: 

    实现类:

    CartDao:

     registerSuccess页面

    1. <%@ page language="java" contentType="text/html; charset=utf-8"
    2. pageEncoding="utf-8"%>
    3. "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    4. "height: 100%">
    5. "Content-Type" content="text/html; charset=utf-8">
    6. "X-UA-Compatible" content="IE=edge">
    7. "viewport" content="width=device-width, initial-scale=1">
    8. "css/bootstrap.min.css" rel="stylesheet">
    9. "stylesheet" type="text/css" href="css/login.css">
    10. HITECH
    11. "height: 100%;background: url('image/商品列表背景.png');z-index: 3">
    12. "height: 100%;width: 100%;background: rgba(0,0,0,0.29);z-index: 2;display: flex;align-items: center;justify-content: center;">
    13. "width: 700px;height: 140px;padding:25px;border-radius:3px;background-image: -webkit-linear-gradient(45deg, #ffffff 0%, #f3f3f3 100%);position: relative">
    14. "image/图标.png" style="width: 80px;height: auto;margin-bottom: 35px">"float: right;font-family: '华文新魏';font-size: 16px">${zt}
    15. "float: left;color: grey;font-weight:bold;background:url('image/提示背景.jpg');border-top-left-radius: 5px;border-bottom-left-radius: 5px;padding: 10px;width: 500px;text-align: center">${ts}
  • 点击连接进行验证登录

    邮箱登录:

    UserService:

    实现类:更具email获取用户信息,进行发送邮件,进行验证用户登录

    User Dao:

    1. //根据email获取user实例
    2. @Select("select * from t_user where email=#{email} and flag=2")
    3. @ResultType(User.class)
    4. User selectEmail(String email);

    EmailUtils2 :工具类发送短信:进行本地验证登录 用户信息

    1. package com.gdsdxy.common.utils;
    2. import com.gdsdxy.domain.User;
    3. import javax.mail.MessagingException;
    4. import javax.mail.Session;
    5. import javax.mail.Transport;
    6. import javax.mail.internet.InternetAddress;
    7. import javax.mail.internet.MimeMessage;
    8. import java.io.UnsupportedEncodingException;
    9. import java.net.Inet4Address;
    10. import java.net.UnknownHostException;
    11. import java.util.Date;
    12. import java.util.Properties;
    13. /*
    14. * 基于JDK实现邮件发送
    15. * 主要是实现激活码的发送
    16. * */
    17. public class EmailUtils2 {
    18. public static void sendEmail(User user){
    19. //邮箱
    20. String myAccount = "lx_teach@163.com";
    21. //授权码
    22. String myPass = "java168";
    23. //邮箱服务器
    24. String SMTPHost = "smtp.163.com";
    25. //设置属性信息
    26. Properties prop = new Properties();
    27. //设置协议
    28. prop.setProperty("mail.transport.protocol", "smtp");
    29. //邮件服务器
    30. prop.setProperty("mail.smtp.host", SMTPHost);
    31. //认证
    32. prop.setProperty("mail.smtp.auth", "true");
    33. //1、创建会话
    34. Session session = Session.getDefaultInstance(prop);
    35. //设置是否需要调试
    36. session.setDebug(false);
    37. //2、创建发送信息
    38. MimeMessage message = createMsg(session,myAccount,user);
    39. //4发送信息操作
    40. try {
    41. Transport tran = session.getTransport();
    42. //连接
    43. tran.connect(myAccount, myPass);
    44. //发送消息
    45. tran.sendMessage(message, message.getAllRecipients());
    46. //关闭
    47. tran.close();
    48. } catch (MessagingException e) {
    49. // TODO Auto-generated catch block
    50. e.printStackTrace();
    51. }
    52. }
    53. //生成邮件消息
    54. private static MimeMessage createMsg(Session session, String myAccount, User user) {
    55. //创建消息对象
    56. MimeMessage message = new MimeMessage(session);
    57. //设置
    58. try {
    59. //3.1发送方
    60. message.setFrom(new InternetAddress(myAccount, "HITECH官方邮件", "utf-8"));
    61. //3.2设置接收方
    62. /*
    63. * MimeMessage.RecipientType.TO
    64. * MimeMessage.RecipientType.CC
    65. * MimeMessage.RecipientType.BCC
    66. * */
    67. message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail(), user.getUsername(), "utf-8"));
    68. //3.3 设置主题
    69. message.setSubject("HITECH邮箱登录","utf-8");
    70. //获取本机的ip地址
    71. String ip = Inet4Address.getLocalHost().getHostAddress();
    72. String url = "http://localhost:8080/hitech_war/emailLogin?username="+ user.getUsername()+"&password="+user.getPassword();
    73. //String url = "http://"+ip+":8080/fengmi_war/activate?e="+ Base64Utils.encode(user.getEmail())+"&c="+Base64Utils.encode(user.getActivatecode());
    74. //设置正文信息
    75. message.setContent(user.getUsername()+",欢迎你,
      点击登录(不行就复制粘贴地址到浏览器上)"
      +url+"","text/html;charset=utf-8");
    76. //设置日期
    77. message.setSentDate(new Date());
    78. //保存
    79. message.saveChanges();
    80. } catch (UnsupportedEncodingException | MessagingException | UnknownHostException e) {
    81. // TODO Auto-generated catch block
    82. e.printStackTrace();
    83. }
    84. return message;
    85. }
    86. }

    Controller:验证用户登录 

    UserService:

    实现类:

    UserDao:

    1. //登录 用户名或密码都可以使用
    2. @Select("select * from t_user where flag=2 and username=#{username} and password=#{password}")
    3. @ResultType(User.class)
    4. User Emailyanz(@Param("username") String username,@Param("password") String password);

    (4)忘记密码-发送邮件修改密码

     

    userService.Xiugaijihuoma(acode, e); 

    UserService

    实现类

    UserDao:

    1. //修改激活码
    2. @Update("update t_user set activatecode=#{c} where email=#{e}")
    3. boolean Xiugaijihuoma(@Param("c") String c ,@Param("e") String e);

     userService.selectEmailAndC(acode,e);发送邮件进行修改

    UserService:

    实现类:

    1. package com.gdsdxy.common.utils;
    2. import com.gdsdxy.domain.User;
    3. import javax.mail.MessagingException;
    4. import javax.mail.Session;
    5. import javax.mail.Transport;
    6. import javax.mail.internet.InternetAddress;
    7. import javax.mail.internet.MimeMessage;
    8. import java.io.UnsupportedEncodingException;
    9. import java.net.Inet4Address;
    10. import java.net.UnknownHostException;
    11. import java.util.Date;
    12. import java.util.Properties;
    13. /*
    14. * 基于JDK实现邮件发送
    15. * 主要是实现激活码的发送
    16. * */
    17. public class EmailUtils3 {
    18. public static void sendEmail(User user){
    19. //邮箱
    20. String myAccount = "lx_teach@163.com";
    21. //授权码
    22. String myPass = "java168";
    23. //邮箱服务器
    24. String SMTPHost = "smtp.163.com";
    25. //设置属性信息
    26. Properties prop = new Properties();
    27. //设置协议
    28. prop.setProperty("mail.transport.protocol", "smtp");
    29. //邮件服务器
    30. prop.setProperty("mail.smtp.host", SMTPHost);
    31. //认证
    32. prop.setProperty("mail.smtp.auth", "true");
    33. //1、创建会话
    34. Session session = Session.getDefaultInstance(prop);
    35. //设置是否需要调试
    36. session.setDebug(false);
    37. //2、创建发送信息
    38. MimeMessage message = createMsg(session,myAccount,user);
    39. //4发送信息操作
    40. try {
    41. Transport tran = session.getTransport();
    42. //连接
    43. tran.connect(myAccount, myPass);
    44. //发送消息
    45. tran.sendMessage(message, message.getAllRecipients());
    46. //关闭
    47. tran.close();
    48. } catch (MessagingException e) {
    49. // TODO Auto-generated catch block
    50. e.printStackTrace();
    51. }
    52. }
    53. //生成邮件消息
    54. private static MimeMessage createMsg(Session session, String myAccount, User user) {
    55. //创建消息对象
    56. MimeMessage message = new MimeMessage(session);
    57. //设置
    58. try {
    59. //3.1发送方
    60. message.setFrom(new InternetAddress(myAccount, "HITECH官方邮件", "utf-8"));
    61. //3.2设置接收方
    62. /*
    63. * MimeMessage.RecipientType.TO
    64. * MimeMessage.RecipientType.CC
    65. * MimeMessage.RecipientType.BCC
    66. * */
    67. message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail(), user.getUsername(), "utf-8"));
    68. //3.3 设置主题
    69. message.setSubject("HITECH忘记密码","utf-8");
    70. //获取本机的ip地址
    71. String ip = Inet4Address.getLocalHost().getHostAddress();
    72. String url = "http://localhost:8080/hitech_war/wjmm.jsp?e="+Base64Utils.encode(user.getEmail())+"&c="+Base64Utils.encode(user.getActivatecode());
    73. //String url = "http://"+ip+":8080/fengmi_war/activate?e="+ Base64Utils.encode(user.getEmail())+"&c="+Base64Utils.encode(user.getActivatecode());
    74. //设置正文信息
    75. message.setContent(user.getUsername()+",你好,
      点击更新密码(不行就复制粘贴地址到浏览器上)"
      +url+"","text/html;charset=utf-8");
    76. //设置日期
    77. message.setSentDate(new Date());
    78. //保存
    79. message.saveChanges();
    80. } catch (UnsupportedEncodingException | MessagingException | UnknownHostException e) {
    81. // TODO Auto-generated catch block
    82. e.printStackTrace();
    83. }
    84. return message;
    85. }
    86. }
    registerSuccess:跳转页面
    1. <%@ page language="java" contentType="text/html; charset=utf-8"
    2. pageEncoding="utf-8"%>
    3. "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    4. "height: 100%">
    5. "Content-Type" content="text/html; charset=utf-8">
    6. "X-UA-Compatible" content="IE=edge">
    7. "viewport" content="width=device-width, initial-scale=1">
    8. "css/bootstrap.min.css" rel="stylesheet">
    9. "stylesheet" type="text/css" href="css/login.css">
    10. HITECH
    11. "height: 100%;background: url('image/商品列表背景.png');z-index: 3">
    12. "height: 100%;width: 100%;background: rgba(0,0,0,0.29);z-index: 2;display: flex;align-items: center;justify-content: center;">
    13. "width: 700px;height: 140px;padding:25px;border-radius:3px;background-image: -webkit-linear-gradient(45deg, #ffffff 0%, #f3f3f3 100%);position: relative">
    14. "image/图标.png" style="width: 80px;height: auto;margin-bottom: 35px">"float: right;font-family: '华文新魏';font-size: 16px">${zt}
    15. "float: left;color: grey;font-weight:bold;background:url('image/提示背景.jpg');border-top-left-radius: 5px;border-bottom-left-radius: 5px;padding: 10px;width: 500px;text-align: center">${ts}
  • 修改密码页面:${param.e}获取连接后加密的邮箱跟激活码

    1. <%@ page language="java" contentType="text/html; charset=utf-8"
    2. pageEncoding="utf-8" %>
    3. "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    4. "height: 100%">
    5. "Content-Type" content="text/html; charset=utf-8">
    6. "X-UA-Compatible" content="IE=edge">
    7. "viewport" content="width=device-width, initial-scale=1">
    8. "css/bootstrap.min.css" rel="stylesheet">
    9. "stylesheet" type="text/css" href="css/login.css">
    10. HITECH
    11. "height: 100%;background: url('image/商品列表背景.png');z-index: 3">
    12. "height: 100%;width: 100%;background: rgba(0,0,0,0.29);z-index: 2;display: flex;align-items: center;justify-content: center;">
    13. "width: 303px;height: 205px;padding:25px;border-radius:3px;background-image: -webkit-linear-gradient(45deg, #ffffff 0%, #f3f3f3 100%);position: relative">
    14. "image/图标.png" style="width: 80px;height: auto;margin-bottom: 35px">
    15. style="float: right;font-family: '华文新魏';font-size: 16px">修改密码
    16. "wjmm" method="post" style="font-family: '华文新魏'">
    17. 请输入新密码:"psd1" type="password" name="password"
    18. style="border-radius: 3px;border: 1px solid #3cadeb;margin: 0 0 10px 0;" required="required"
    19. pattern="[a-zA-Z0-9_!@#$%^&*]{5,16}">
    20. 再次输入密码:"psd2" type="password" name="password2"
    21. style="border-radius: 3px;border: 1px solid #3cadeb;margin: 0;" required="required"
    22. onchange="validate()">
    23. "hidden" name="e" value="${param.e}">
    24. "hidden" name="c" value="${param.c}">
    25. style="background: #ff4545;color: white;border-radius:unset;width:100%;line-height: 27px;border: unset;margin-top: 25px;"
    26. type="submit" value="确认">确认

    Controller: 

    UserService:

     实现类:

    UserDao:

    1. //根据email和激活码修改密码
    2. @Update("update t_user set password=#{password},activatecode=#{cc} where email=#{e} and activatecode=#{c}")
    3. boolean wjmm(@Param("cc") String cc,@Param("password") String password,@Param("e") String e,@Param("c") String c);

  • 相关阅读:
    codeforces每日5题(均1600)-第二十八天
    连接mysql数据库报错:host ‘xxx’ is blocked ...
    2 寄存器
    wy的leetcode刷题记录_Day34
    如何通过Photoshop将视频转换成GIF图片
    小迪安全33WEB 攻防-通用漏洞&文件上传&中间件解析漏洞&编辑器安全
    python机器学习入门之pandas的使用(超详细,必看)
    PicGo+Gitee+Typora搭建云图床
    配置nginx域名转发
    SpringCloud 微服务全栈体系(四)
  • 原文地址:https://blog.csdn.net/dengfengling999/article/details/133959619