最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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) {
      // 判斷當前待發(fā)送郵箱是否已經(jīng)有驗證碼
      String key = CODE_KEY_PREFIX + mail.getTo();
      Integer code = redisTemplate.opsForValue().get(key);
      if (code != null) {
         throw new UserException("當前郵箱已經(jīng)發(fā)送驗證碼");
      }
      // 生成隨機 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)文章

  • java插入排序 Insert sort實例

    java插入排序 Insert sort實例

    java插入排序 Insert sort實例代碼,需要的朋友可以參考一下
    2013-03-03
  • Springboot接口參數(shù)校驗的方法

    Springboot接口參數(shù)校驗的方法

    在設(shè)計接口時我們通常需要對接口中的非法參數(shù)做校驗,以降低在程序運行時因為一些非法參數(shù)而導(dǎo)致程序發(fā)生異常的風險,這篇文章給大家介紹Springboot接口參數(shù)校驗的方法,感興趣的朋友一起看看吧
    2024-03-03
  • SpringBoot AOP實現(xiàn)釘釘+企業(yè)微信雙渠道異常告警

    SpringBoot AOP實現(xiàn)釘釘+企業(yè)微信雙渠道異常告警

    本文主要介紹了SpringBoot AOP實現(xiàn)釘釘+企業(yè)微信雙渠道異常告警,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • java算法之Math.random()隨機概率玩法實例演示

    java算法之Math.random()隨機概率玩法實例演示

    最近打算整理排序算法,發(fā)現(xiàn)很有必要準備一下生成隨機數(shù)的工具類,下面這篇文章主要給大家介紹了關(guān)于java算法之Math.random()隨機概率玩法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解步驟詳解

    Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解步驟詳解

    這篇文章主要介紹了Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解步驟,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • springboot2.x引入feign踩的坑及解決

    springboot2.x引入feign踩的坑及解決

    這篇文章主要介紹了springboot2.x引入feign踩的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • IDEA?Reformat?Code?格式化代碼(詳解)

    IDEA?Reformat?Code?格式化代碼(詳解)

    平時使用Ctrl+Alt+L可以格式化代碼,idea幫你整理空格,換行等,讓代碼看起來更整潔,今天通過本文給大家分享IDEA?Reformat?Code?格式化?的過程,感興趣的朋友一起看看吧
    2023-11-11
  • Java生成二維碼可添加logo和文字功能

    Java生成二維碼可添加logo和文字功能

    這篇文章主要介紹了Java生成二維碼可添加logo和文字功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • java多線程并發(fā)executorservice(任務(wù)調(diào)度)類

    java多線程并發(fā)executorservice(任務(wù)調(diào)度)類

    這篇文章主要介紹了線程并發(fā)ScheduledExecutorService類,設(shè)置 ScheduledExecutorService ,2秒后,在 1 分鐘內(nèi)每 10 秒鐘蜂鳴一次
    2014-01-01
  • JAVA中string數(shù)據(jù)類型轉(zhuǎn)換詳解

    JAVA中string數(shù)據(jù)類型轉(zhuǎn)換詳解

    在JAVA中string是final類,提供字符串不可以修改,string類型在項目中經(jīng)常使用,下面給大家介紹了string七種數(shù)據(jù)類型轉(zhuǎn)換,需要的朋友可以參考下
    2015-07-07

最新評論

博爱县| 蓬莱市| 台中市| 伊通| 河东区| 缙云县| 叶城县| 筠连县| 仙游县| 玉门市| 石屏县| 冕宁县| 永福县| 出国| 即墨市| 长海县| 佛坪县| 蚌埠市| 曲麻莱县| 锡林浩特市| 桃源县| 剑阁县| 山阴县| 修水县| 白山市| 石首市| 慈利县| 凌云县| 诸城市| 仙居县| 闵行区| 南京市| 双辽市| 津南区| 渝中区| 延安市| 华池县| 怀化市| 桐乡市| 泾阳县| 左贡县|