国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Maven多模塊項目+Java實現(xiàn)郵箱驗證

hzx / 3344人閱讀

摘要:昨晚準備第一時間寫一篇郵箱驗證,但是由于加班太晚整個人都是暈暈乎乎的就沒有寫這一篇文章。

昨晚準備第一時間寫一篇Java郵箱驗證,但是由于加班太晚整個人都是暈暈乎乎的就沒有寫這一篇文章。
在生活中,郵箱驗證已經(jīng)不是什么新鮮事,其實萬變不離其宗,它的原理就是注冊成功后,生成一個token,然后發(fā)送給用戶帶有token的url,然后服務器端根據(jù)判斷激活是否超時、token是否合法、用戶是否已經(jīng)激活過等操作,對于筆者今天寫的這個項目,只是簡單的完成驗證,更多的操作需要后期去不斷完成以及優(yōu)化,項目搭建運用了《Maven多模塊項目搭建》,項目已經(jīng)上傳到Github:項目地址
Begin正題:

一、 前端界面搭建

前端的話沒有使用Bootstrap,使用了Google家的materialize(http://materializecss.com/),雖然簡單的界面卻變成了Android風格,運用起來比較方便,效果方面優(yōu)于Boostrap。






注冊







    

當消息為空的提示

二、后端開發(fā)

1、SMTP協(xié)議

SMTP的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協(xié)議,在該郵箱驗證項目中因為只涉及到郵箱的發(fā)送和接受,所以使用SMTP協(xié)議

2、搭建SendEmail.java

該Java類對郵件發(fā)送進行了封裝,首先需要添加JavaMail的依賴

依賴:

            
                javax.mail
                mail
                1.4
            

項目代碼:

public class SendEmail {

    private final static String FROM_EMAIL = "yangzinan127@163.com";
    private final static String HOST = "smtp.163.com";
    private final static String PASSWORD = "************";
    private final static String SMTP = "smtp";
    private static Properties properties = new Properties();
    private static Session session;

    public static void sendMail(String to, String title, String context) throws Exception {

        properties.setProperty("mail.transport.protocol", "smtp");//電子郵箱協(xié)議
       
        properties.setProperty("mail.smtp.host", HOST); //郵箱服務器地址
        
        properties.setProperty("mail.smtp.auth", "true"); 

        session = Session.getInstance(properties);
        
        session.setDebug(true);//開啟調(diào)試模式,可以追蹤到郵件發(fā)送過程

        MimeMessage mimeMessage = new MimeMessage(session);

        mimeMessage.setSubject(title);//標題
        
        mimeMessage.setContent(context, "text/html;charset=utf-8");//內(nèi)容

        mimeMessage.setFrom(new InternetAddress(FROM_EMAIL));//發(fā)送人

        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//收件人

        mimeMessage.setSentDate(new Date());//發(fā)送時間

        mimeMessage.saveChanges();//保存修改

        Transport transport = session.getTransport(SMTP);

        transport.connect(FROM_EMAIL, PASSWORD);

        transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());

        transport.close();

    }
}

如果你寫過郵件發(fā)送,你就會發(fā)現(xiàn)這個代碼會有一個問題transport.connect(FROM_EMAIL, PASSWORD);,問題其實就在PASSWORD上,其實這個并不是電子郵箱登錄密碼,如果你寫了登錄密碼,系統(tǒng)將會拋出認證失敗yi"chang,之前看過一些博客,但是里面都沒有涉及到這個問題,解決方案如下:

首先需要開啟電子郵箱協(xié)議服務:

重點我已經(jīng)用箭頭標注在圖片中->授權(quán)碼

授權(quán)碼就是第三方登錄時用到的認證密碼

3、注冊信息提交

項目代碼:

Controller層

第一步,需要判斷需要注冊的郵箱地址是否存在,如果存在就返回1,拒絕用戶提交該郵箱地址,運用前端ajax請求

    @PostMapping("/jsonSelectUser.do")
    @ResponseBody
    public Map selectUserByEmail(@RequestParam("email") String email){
        User user = webService.selectUserByEmail(email);
        
        Map map = new HashMap<>();
        
        if(user==null){
            map.put("state", 0);
        }else{
            map.put("state", 1);
        }
        
        return map;
    }

第二步,若郵箱地址不存在,就允許用戶提交信息

    @PostMapping("/insertUser.do")
    @ResponseBody
    public Map insertUser(@RequestParam("email") String email,
            @RequestParam("password") String password) throws Exception {

        Map map = new HashMap();

        int code = webService.insertUser(email, password);

        if (code > 0) {
            map.put("code", SUCCESS_CODE);
            map.put("message", "添加成功");
            return map;
        } else {
            map.put("code", ERROR_CODE);
            map.put("message", "添加失敗");
            return map;
        }

    }

用戶信息提交的流程是Controller->Service->Dao->Mapper.xml->DB

Service層

需要對控制層傳輸過來的密碼進行MD5加密,然后生成code(用戶唯一標識)

MD5依賴:

            
                commons-codec
                commons-codec
                1.10
            
/*
     * 添加用戶信息
     */
    @Transactional
    public int insertUser(String email, String password) throws Exception {
        int num = userMapper.insertUser(email,doPassword(password),doCode(email, password));
        
        String context="

尊敬的"+email+"用戶:

感謝您注冊我們的網(wǎng)站,但是注冊之后需要你繼續(xù)完成用戶激活:"+URL+"register.do?code="+doCode(email, password)+"&email="+email+"

"; //發(fā)送郵件操作 sendMail(email, "用戶激活驗證",context); return num; }

用戶密碼加密:

    /*
     * 密碼加密
     */
    public static String doPassword(String password) {
        String password_md5 = DigestUtils.md5Hex(password);
        return password_md5;
    }

用戶唯一標識生成:

    /*
     * 生成code
     */
    public static String doCode(String email, String password) {
        String code = DigestUtils.md5Hex(email + password);
        return code;
    }

Dao層

持久化層:

int insertUser(@Param("email") String email,@Param("password") String doPassword,@Param("code") String doCode);

User selectUserByEmail(@Param("email") String email);

Mapper.xml

    
       insert into user(email,password,code) values(#{email},#{password},#{code})
    
    
    

添加完成跳轉(zhuǎn)到信息列表:

用戶接收到信息:

4、郵件發(fā)送與驗證

郵箱驗證,首先需驗證郵箱地址和唯一標識是否為用戶偽造,若是偽造:

若正確:

數(shù)據(jù)庫中用戶信息也會進行改變,注冊成功并沒有激活:

注冊成功并激活成功:

列表界面也會改變:

Controller層

項目代碼:

    @GetMapping("/register.do")
    public String register(@RequestParam("code") String code, @RequestParam("email") String email) {

        User user = webService.selectUserByEmail(email);

        if (user!=null) {
            
            if((user.getCode()).equals(code) && user.getState()==0){
                int num = webService.updateUserState(email);
                return "success";
            }else{
                return "error";
            }

        } else {
            return "error";
        }

    }

Service層

@Transactional
    public int updateUserState(String email) {
        int num = userMapper.updateUserState(email);
        return num;
    }

Dao層

    int updateUserState(@Param("email") String email);

Mapper.xml層

    
         update user set code="",state=1 where email=#{email}
    

基本的郵箱驗證已經(jīng)完成,其余的功能以及數(shù)據(jù)安全處理后面不斷地完善,如果有不足的地方,還請大家多多指教,筆者很喜歡結(jié)交一些程序員朋友,大家可以加微信一起交流

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67992.html

相關(guān)文章

  • Java EE】從零開始寫項目【總結(jié)】

    摘要:目前該功能并未完善,敬請期待。反正每次都會有新的東西補充上去一開始我本來想做的是可以使用微信登陸,也可以使用賬戶郵箱登陸,也可以使用短信登陸的。后來發(fā)現(xiàn)微信登陸要企業(yè)認證,做不了。 從零開發(fā)項目概述 最近這一直在復習數(shù)據(jù)結(jié)構(gòu)和算法,也就是前面發(fā)出去的排序算法八大基礎(chǔ)排序總結(jié),Java實現(xiàn)單向鏈表,棧和隊列就是這么簡單,十道簡單算法題等等... 被虐得不要不要的,即使是非常簡單有時候繞半...

    imtianx 評論0 收藏0
  • Selenuim Java 借用某寶某地區(qū)的電商數(shù)據(jù)

    摘要:剛下載時項目中使用后得不到某寶的數(shù)據(jù),因為數(shù)據(jù)是動態(tài)生成的。使用去獲取數(shù)據(jù)某寶的取不到用某度的首頁試了下是可以的。我是根據(jù)店鋪名稱賣家地區(qū)中包含特定關(guān)鍵字來過濾的。把寶貝列表的做為輸入循環(huán)寶貝列表并進入抓取交易量數(shù)據(jù)并保存。 項目背景 因前段時間公司有需求,想得到我們公司所在地區(qū)(四線城市)的電商企業(yè)的銷售額排名情況,時間緊急,調(diào)研無 果,花費RMB若干買了某工具的數(shù)據(jù)服務(避...

    Arno 評論0 收藏0
  • 慕課網(wǎng)_《Java實現(xiàn)郵箱驗證》學習總結(jié)

    摘要:時間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。用戶過生日,系統(tǒng)發(fā)送生日祝福郵件。將最新活動和優(yōu)惠以郵件的形式告知會員。通常把處理用戶請求郵件發(fā)送請求的郵件服務器稱為服務器。提供了加密的協(xié)議被稱為。 時間:2017年06月07日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zcc...

    marser 評論0 收藏0
  • Maven的pom文件那些事

    摘要:文件項目隸屬的實際項目名實際項目中的一個項目模塊名稱版本號當前項目打包的方式,默認為以上的配置會獲得一個格式的包用于定義構(gòu)建輸出的一些附屬的構(gòu)建。 pom.xml文件 org.son.nexus//項目隸屬的實際項目名 nexus-indexer//實際項目中的一個maven項目模塊名稱 2.0.0//版本號 jar//當前maven項目打包的方式,默認為jar 以上的配置會獲得一個-...

    NoraXie 評論0 收藏0

發(fā)表評論

0條評論

hzx

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<