欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot-Mail工具實現(xiàn)郵箱驗證碼登錄注冊功能

 更新時間:2024年07月16日 10:13:23   作者:Dpaper  
現(xiàn)在許多pc程序都有著使用郵箱驗證碼實現(xiàn)登錄注冊的功能,那么我們應(yīng)該如何完成郵箱驗證碼功能呢,我們可以使用springboot內(nèi)置的springboot-mail再結(jié)合redis來完成這個功能,感興趣的朋友跟隨小編一起看看吧

前言

現(xiàn)在許多pc程序都有著使用郵箱驗證碼實現(xiàn)登錄注冊的功能,那么我們應(yīng)該如何完成郵箱驗證碼功能呢,我們可以使用springboot內(nèi)置的springboot-mail再結(jié)合redis來完成這個功能。

代碼實現(xiàn)

一、引入springboot-mail和redis依賴

<!--郵箱依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--redis依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二、郵箱常量類

public class MailConstant {
   /**
    * 郵箱驗證redis前綴
    */
   public static final String CODE_KEY_PREFIX = "mail:";
}

三、郵箱工具類

@Slf4j
@Service
public class MailUtils {
   @Resource
   RedisTemplate<String, Integer> redisTemplate;
   @Resource
   private JavaMailSenderImpl mailSender;
   public void sendMail(Mail mail) throws MailSendException {
      try {
         MimeMessageHelper messageHelper = new MimeMessageHelper(mailSender.createMimeMessage(), true);
      if (mail.getFrom() == null || mail.getFrom().isEmpty()) {
         mail.setFrom("xxx");
      }
      //郵件發(fā)信人
      messageHelper.setFrom(mailSender.getUsername() + '(' + mail.getFrom() + ')');
      //郵件收信人
      messageHelper.setTo(mail.getTo().split(","));
      //郵件主題
      messageHelper.setSubject(mail.getSubject());
      //郵件內(nèi)容
      messageHelper.setText(mail.getText());
      //發(fā)送郵件
      mailSender.send(messageHelper.getMimeMessage());
      } catch (Exception e) {
         log.warn("郵件發(fā)送失?。簕}", e.getMessage());
         throw new MailSendException("郵件發(fā)送失敗:" + e.getMessage());
      }
   }
   /**
    * 發(fā)送驗證碼郵件
    *
    * @param mail 郵件信息
    */
   public void sendVerificationCode(Mail mail) {
      // 判斷當(dāng)前待發(fā)送郵箱是否已經(jīng)有驗證碼
      String key = CODE_KEY_PREFIX + mail.getTo();
      Integer code = redisTemplate.opsForValue().get(key);
      if (code != null) {
         throw new UserException("當(dāng)前郵箱已經(jīng)發(fā)送驗證碼");
      }
      // 生成隨機(jī) 6位驗證碼
      int idenCode = (int) ((Math.random() * 9 + 1) * 100000);
      mail.setSubject("xxx");
      mail.setText("驗證碼:" + idenCode);
      redisTemplate.opsForValue().set(key, idenCode, 60, TimeUnit.SECONDS);
      sendMail(mail);
   }
}

四、代碼調(diào)用

4.1 發(fā)送郵箱

/**
 * 發(fā)送郵箱驗證碼
 *
 * @param email 用戶郵箱
 * @return 發(fā)送結(jié)果
 */
@PostMapping("send/code")
public Result<?> sendUserMail(String email) {
    Mail mail = new Mail();
    mail.setTo(email);
    mailUtils.sendVerificationCode(mail);
    return Result.ok(null, "發(fā)送成功");
}

4.2 用戶注冊

@Override
public boolean userRegister(User user, Integer captcha) {
    //判斷用戶是否已經(jīng)注冊
    User exist = getOne(Wrappers.<User>lambdaQuery().eq(User::getMail, user.getMail()));
    if(exist!=null){
        throw new UserException("用戶已注冊");
    }
    // 判斷驗證碼是否相同
    String key = CODE_KEY_PREFIX + user.getMail();
    Integer authcode = (Integer) redisTemplate.opsForValue().get(key);
    if (authcode == null) {
        throw new UserException("驗證碼已過期,請重新發(fā)送");
    }
    if (!authcode.equals(captcha)) {
        throw new UserException("驗證碼錯誤");
    }
    return userMapper.insert(user)>0;
}

總結(jié)

以上就是springboot實現(xiàn)郵箱驗證碼登錄注冊的基本實現(xiàn),覺得有用的大家可以點點贊。

到此這篇關(guān)于SpringBoot-Mail工具的使用-實現(xiàn)郵箱驗證碼登錄注冊的文章就介紹到這了,更多相關(guān)SpringBoot郵箱驗證碼登錄注冊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring通過ApplicationContext主動獲取bean的方法講解

    Spring通過ApplicationContext主動獲取bean的方法講解

    今天小編就為大家分享一篇關(guān)于Spring通過ApplicationContext主動獲取bean的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java遞歸算法詳解(動力節(jié)點整理)

    Java遞歸算法詳解(動力節(jié)點整理)

    Java遞歸算法是基于Java語言實現(xiàn)的遞歸算法。遞歸算法對解決一大類問題很有效,它可以使算法簡潔和易于理解。接下來通過本文給大家介紹Java遞歸算法相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2017-03-03
  • SpringMvc獲取頁面中的參數(shù)方法詳解

    SpringMvc獲取頁面中的參數(shù)方法詳解

    這篇文章主要介紹了SpringMvc獲取頁面中的參數(shù)方法詳解,獲取頁面的參數(shù)通常都是讓類實現(xiàn)設(shè)置HttpServletRequest request接口然后重寫接口中的方法的辦法來得到參數(shù),但是在Springmvc中有其他的獲取方法,需要的朋友可以參考下
    2023-10-10
  • JAVA多線程之中斷機(jī)制及處理中斷的方法

    JAVA多線程之中斷機(jī)制及處理中斷的方法

    這篇文章主要記錄使用 interrupt() 方法中斷線程,以及如何對InterruptedException進(jìn)行處理,感覺對InterruptedException異常進(jìn)行處理是一件謹(jǐn)慎且有技巧的活兒,需要的朋友可以參考下
    2023-02-02
  • java通過模擬post方式提交表單實現(xiàn)圖片上傳功能實例

    java通過模擬post方式提交表單實現(xiàn)圖片上傳功能實例

    這篇文章主要介紹了java通過模擬post方式提交表單實現(xiàn)圖片上傳功能實例,涉及Java針對表單的提交操作響應(yīng)及文件傳輸?shù)南嚓P(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • 使用spring boot開發(fā)時java對象和Json對象轉(zhuǎn)換的問題

    使用spring boot開發(fā)時java對象和Json對象轉(zhuǎn)換的問題

    這篇文章主要介紹了使用spring boot開發(fā)時java對象和Json對象轉(zhuǎn)換的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • spring cloud consul使用ip注冊服務(wù)的方法示例

    spring cloud consul使用ip注冊服務(wù)的方法示例

    這篇文章主要介紹了spring cloud consul使用ip注冊服務(wù)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SSH框架網(wǎng)上商城項目第2戰(zhàn)之基本增刪查改、Service和Action的抽取

    SSH框架網(wǎng)上商城項目第2戰(zhàn)之基本增刪查改、Service和Action的抽取

    SSH框架網(wǎng)上商城項目第2戰(zhàn)之基本增刪查改、Service和Action的抽取,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java中的"找不到符號"錯誤解決辦法

    Java中的"找不到符號"錯誤解決辦法

    開發(fā)中遇到一個問題,當(dāng)我用idea開發(fā)工具將新的項目代碼從GitLab上面拉取下來,所有的Maven依賴也導(dǎo)入成功,然后啟動項目,結(jié)果報錯:java:找不到符號,這篇文章主要給大家介紹了關(guān)于Java中"找不到符號"錯誤的解決辦法,需要的朋友可以參考下
    2023-10-10
  • Spring注解實現(xiàn)自動裝配過程解析

    Spring注解實現(xiàn)自動裝配過程解析

    這篇文章主要介紹了Spring注解實現(xiàn)自動裝配過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論