1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      利用Java怎么實(shí)現(xiàn)一個(gè)郵箱激活功能

      利用Java怎么實(shí)現(xiàn)一個(gè)郵箱激活功能?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

      創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)天門,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

      實(shí)現(xiàn)思路

      注冊(cè)時(shí)填寫郵箱,點(diǎn)擊注冊(cè)時(shí)網(wǎng)站系統(tǒng)郵箱發(fā)送激活驗(yàn)證鏈接到此郵箱,用戶來激活賬戶

      利用Java怎么實(shí)現(xiàn)一個(gè)郵箱激活功能

      點(diǎn)擊注冊(cè),系統(tǒng)郵箱會(huì)發(fā)送一封激活郵件到你填寫的郵箱賬號(hào)中

      利用Java怎么實(shí)現(xiàn)一個(gè)郵箱激活功能

      在沒有進(jìn)行激活操作前,設(shè)定某個(gè)字段狀態(tài)是0,表示此賬號(hào)未激活,不可以使用或者某些功能受限

      利用Java怎么實(shí)現(xiàn)一個(gè)郵箱激活功能

      激活操作之后,將activated字段更新為1,這樣就完成了激活操作

      那么這里還有一個(gè)codeUrl字段,他的作用是存入一個(gè)唯一標(biāo)識(shí)的隨機(jī)碼,這個(gè)隨機(jī)碼由用戶名和UUID唯一標(biāo)識(shí)的隨機(jī)數(shù)組成,這樣做的目的是防止用戶使用不存在的郵箱又修改鏈接中的參數(shù)來激活賬戶,將鏈接中的隨機(jī)碼和數(shù)據(jù)庫中的比對(duì),來達(dá)到相對(duì)安全的激活。

      下面是具體的代碼

      首先是注冊(cè)的servlet,這里主要測試激活賬號(hào)的功能,注冊(cè)代碼有點(diǎn)low,不安全,將就看一下

      package org.amuxia.emailtest.servlet; 
       
      import java.io.IOException; 
      import java.sql.ResultSet; 
      import java.sql.SQLException; 
      import java.util.UUID; 
       
      import javax.servlet.ServletException; 
      import javax.servlet.annotation.WebServlet; 
      import javax.servlet.http.HttpServlet; 
      import javax.servlet.http.HttpServletRequest; 
      import javax.servlet.http.HttpServletResponse; 
       
      import org.amuxia.emailtest.pojo.User; 
      import org.amuxia.emailtest.utils.EmailUtils; 
      import org.amuxia.emailtest.utils.MyJDBC; 
       
      /** 
       * @author amuxia 
       * 2017年7月24日 
       */ 
      @WebServlet("/RegistServlet") 
      public class RegistServlet extends HttpServlet { 
       private static final long serialVersionUID = 1L; 
       
       protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        String username = request.getParameter("username"); 
        String password = request.getParameter("password"); 
        String email = request.getParameter("email"); 
        String codeUrl = UUID.randomUUID().toString(); 
        User user = new User(); 
        user.setUsername(username); 
        user.setPassword(password); 
        user.setEmail(email); 
        user.setActivated(false); //剛注冊(cè)默認(rèn)是沒有激活狀態(tài) 
        String SQL = "insert into tb_user(username,password,email,activated,codeUrl) value (?,?,?,?,?) "; 
        MyJDBC.insert(SQL, false, username,password,email,0,codeUrl);//注冊(cè)信息插入數(shù)據(jù)庫 
        String querySQL = "select * from tb_user where email=?"; 
        ResultSet rs = MyJDBC.query(querySQL, email); 
        try { 
         if(rs.next()){ 
          user.setId(rs.getInt(1)); 
         } 
        } catch (SQLException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
         
        // 注冊(cè)成功后,發(fā)送帳戶激活鏈接 
        request.getSession().setAttribute("user", user); 
        EmailUtils.sendAccountActivateEmail(user); 
        request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response); 
       } 
       
      }

      激活賬號(hào)的Servlet,也就是更新操作

      package org.amuxia.emailtest.servlet; 
       
      import java.io.IOException; 
      import java.sql.ResultSet; 
      import java.sql.SQLException; 
       
      import javax.servlet.ServletException; 
      import javax.servlet.annotation.WebServlet; 
      import javax.servlet.http.HttpServlet; 
      import javax.servlet.http.HttpServletRequest; 
      import javax.servlet.http.HttpServletResponse; 
       
      import org.amuxia.emailtest.pojo.User; 
      import org.amuxia.emailtest.utils.GenerateLinkUtils; 
      import org.amuxia.emailtest.utils.MyJDBC; 
       
      /** 
       * @author amuxia 
       * 2017年7月24日 
       */ 
      @WebServlet("/ActivateServlet") 
      public class ActivateServlet extends HttpServlet{ 
       private static final long serialVersionUID = 1L; 
      @Override 
      protected void service(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException { 
       // TODO Auto-generated method stub 
       String idValue = request.getParameter("id"); 
       System.out.println(idValue); 
       int id = -1; 
       try { 
        id = Integer.parseInt(idValue); 
       } catch (NumberFormatException e) { 
        e.printStackTrace(); 
       } 
       String SQL = "select * from tb_user where id=?"; 
       ResultSet rs= MyJDBC.query(SQL, id); 
       User user = new User(); 
       try { 
        if(rs.next()){ 
         user.setId(rs.getInt(1)); 
         user.setUsername(rs.getString(2)); 
         user.setPassword(rs.getString(3)); 
         user.setEmail(rs.getString(4)); 
         user.setActivated(rs.getBoolean(5)); 
         user.setCodeUrl(rs.getString(6)); 
        } 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       //驗(yàn)證無誤,狀態(tài)更改為1,即激活 
       if(GenerateLinkUtils.verifyCheckcode(user, request)){ 
        String updSQL = "update tb_user set activated =1 where id=?"; 
        MyJDBC.execute(updSQL, id); 
        user.setActivated(true); 
        request.getSession().setAttribute("user", user); 
        request.getRequestDispatcher("/WEB-INF/jsp/pass.jsp").forward(request, response); 
       } 
       } 
      }

      發(fā)送Email的工具類

      package org.amuxia.emailtest.utils; 
       
      import java.util.Date; 
      import java.util.Properties; 
       
      import javax.mail.Authenticator; 
      import javax.mail.Message.RecipientType; 
      import javax.mail.PasswordAuthentication; 
      import javax.mail.Session; 
      import javax.mail.Transport; 
      import javax.mail.internet.InternetAddress; 
      import javax.mail.internet.MimeMessage; 
       
      import org.amuxia.emailtest.pojo.User; 
       
      /** 
       * @author amuxia 
       * 2017年7月24日 
       */ 
      public class EmailUtils { 
        
       private static final String FROM = "要發(fā)送郵件的郵箱,這個(gè)例子是163郵箱"; 
       
       public static void sendAccountActivateEmail(User user) { 
        Session session = getSession(); 
        MimeMessage message = new MimeMessage(session); 
        try { 
         message.setSubject("這是一封激活賬號(hào)的郵件,復(fù)制鏈接到地址欄來激活他"); 
         message.setSentDate(new Date()); 
         message.setFrom(new InternetAddress(FROM)); 
         message.setRecipient(RecipientType.TO, new InternetAddress(user.getEmail())); 
         message.setContent(""+GenerateLinkUtils.generateActivateLink(user)+"","text/html;charset=utf-8"); 
         Transport.send(message); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
       
        
       public static Session getSession() { 
        Properties props = new Properties(); 
        props.setProperty("mail.transport.protocol", "smtp"); 
        props.setProperty("mail.smtp.host", "smtp.163.com"); 
        props.setProperty("mail.smtp.port", "25"); 
        props.setProperty("mail.smtp.auth", "true"); 
        Session session = Session.getInstance(props, new Authenticator() { 
         @Override 
         protected PasswordAuthentication getPasswordAuthentication() { 
          return new PasswordAuthentication(FROM, "上面郵箱的密碼"); 
         } 
          
        }); 
        return session; 
       } 
      }

      這里需要注意一下,以上例子配置的是163郵箱,需要進(jìn)行郵箱客戶端的授權(quán),授權(quán)之后,網(wǎng)易郵箱會(huì)發(fā)來一份客戶端授權(quán)碼作為替代郵箱密碼,代碼里填寫的密碼其實(shí)是授權(quán)碼,配置好郵箱最好發(fā)一份郵件測試一下,有時(shí)程序出問題很可能是郵箱客戶端根本發(fā)不了郵件

      加密賬戶激活鏈接生成的工具類

      package org.amuxia.emailtest.utils; 
       
      import java.security.MessageDigest; 
      import java.security.NoSuchAlgorithmException; 
       
      import javax.servlet.ServletRequest; 
       
      import org.amuxia.emailtest.pojo.User; 
       
      /** 
       * @author amuxia 
       * 2017年7月24日 
       */ 
      public class GenerateLinkUtils { 
        
       private static final String CHECK_CODE = "checkCode"; 
        
       public static String generateActivateLink(User user) { 
        return "http://localhost/EmailDemo/ActivateServlet?id=" 
          + user.getId() + "&" + CHECK_CODE + "=" + generateCheckcode(user); 
       } 
        
        
       /** 
        * 生成校驗(yàn)碼,用戶名+UUID唯一標(biāo)識(shí)符,為安全把他們加密發(fā)送 
        * @param user 
        * @return 
        */ 
       public static String generateCheckcode(User user) { 
        String userName = user.getUsername(); 
        String randomCode = user.getCodeUrl(); 
        return md5(userName + ":" + randomCode); 
       } 
       
        
       /** 
        * 接收回來的校驗(yàn)碼和發(fā)送出去的是不是同一份 
        * @param user 
        * @param request 
        * @return 
        */ 
       public static boolean verifyCheckcode(User user,ServletRequest request) { 
        String checkCode = request.getParameter(CHECK_CODE); 
        System.out.println(generateCheckcode(user).equals(checkCode)); 
        return true; 
       } 
       
       private static String md5(String string) { 
        MessageDigest md = null; 
        try { 
         md = MessageDigest.getInstance("md5"); 
         md.update(string.getBytes()); 
         byte[] md5Bytes = md.digest(); 
         return bytes2Hex(md5Bytes); 
        } catch (NoSuchAlgorithmException e) { 
         e.printStackTrace(); 
         System.out.println("md5這里出錯(cuò)了"); 
        } 
         
        return null; 
       } 
        
       private static String bytes2Hex(byte[] byteArray) 
       { 
        StringBuffer strBuf = new StringBuffer(); 
        for (int i = 0; i < byteArray.length; i++) 
        { 
         if(byteArray[i] >= 0 && byteArray[i] < 16) 
         { 
          strBuf.append("0"); 
         } 
         strBuf.append(Integer.toHexString(byteArray[i] & 0xFF)); 
        } 
        return strBuf.toString(); 
       } 
       
      }

      還有一個(gè)操作數(shù)據(jù)庫的封裝類,MyJDBC,前面博客有寫,代碼挺長,就不貼了,這是鏈接:

      https://www.jb51.net/article/70107.htm

      https://www.jb51.net/article/88647.htm

      實(shí)體類User

      package org.amuxia.emailtest.pojo; 
       
      public class User { 
       private int id; 
       private String username; 
       private String password; 
       private String email; 
       private boolean activated;//賬號(hào)狀態(tài) 
       private String codeUrl;//激活鏈接中的隨機(jī)碼 
        
       public int getId() { 
        return id; 
       } 
       public void setId(int id) { 
        this.id = id; 
       } 
       public String getUsername() { 
        return username; 
       } 
       public void setUsername(String username) { 
        this.username = username; 
       } 
       public String getPassword() { 
        return password; 
       } 
       public void setPassword(String password) { 
        this.password = password; 
       } 
       public String getEmail() { 
        return email; 
       } 
       public void setEmail(String email) { 
        this.email = email; 
       } 
       
       public boolean isActivated() { 
        return activated; 
       } 
       public void setActivated(boolean activated) { 
        this.activated = activated; 
       } 
       public String getCodeUrl() { 
        return codeUrl; 
       } 
       public void setCodeUrl(String codeUrl) { 
        this.codeUrl = codeUrl; 
       } 
       public User() { 
        super(); 
         
       } 
        
      }

      注冊(cè)的jsp

      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
       
       
       
       
       
      注冊(cè) 
       
       
       
        
        用戶名:
          密碼:
          郵箱:
                

      用到的包?

      利用Java怎么實(shí)現(xiàn)一個(gè)郵箱激活功能

      關(guān)于利用Java怎么實(shí)現(xiàn)一個(gè)郵箱激活功能問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


      文章標(biāo)題:利用Java怎么實(shí)現(xiàn)一個(gè)郵箱激活功能
      標(biāo)題鏈接:http://www.ef60e0e.cn/article/gehddp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        灵宝市| 高州市| 阳信县| 收藏| 淮南市| 定边县| 芒康县| 正定县| 垦利县| 彭泽县| 凤凰县| 滨海县| 红桥区| 京山县| 游戏| 松桃| 麦盖提县| 刚察县| 卫辉市| 临澧县| 呼图壁县| 常熟市| 德江县| 遂平县| 长寿区| 竹山县| 昌乐县| 高平市| 城步| 威海市| 琼中| 玉林市| 洛阳市| 西宁市| 安西县| 聊城市| 上饶市| 潮州市| 秦安县| 德昌县| 河池市|