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

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

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

前言

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

代碼實(shí)現(xiàn)

一、引入springboot-mail和redis依賴(lài)

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

二、郵箱常量類(lèi)

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

三、郵箱工具類(lèi)

@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ā)送驗(yàn)證碼郵件
    *
    * @param mail 郵件信息
    */
   public void sendVerificationCode(Mail mail) {
      // 判斷當(dāng)前待發(fā)送郵箱是否已經(jīng)有驗(yàn)證碼
      String key = CODE_KEY_PREFIX + mail.getTo();
      Integer code = redisTemplate.opsForValue().get(key);
      if (code != null) {
         throw new UserException("當(dāng)前郵箱已經(jīng)發(fā)送驗(yàn)證碼");
      }
      // 生成隨機(jī) 6位驗(yàn)證碼
      int idenCode = (int) ((Math.random() * 9 + 1) * 100000);
      mail.setSubject("xxx");
      mail.setText("驗(yàn)證碼:" + idenCode);
      redisTemplate.opsForValue().set(key, idenCode, 60, TimeUnit.SECONDS);
      sendMail(mail);
   }
}

四、代碼調(diào)用

4.1 發(fā)送郵箱

/**
 * 發(fā)送郵箱驗(yàn)證碼
 *
 * @param email 用戶(hù)郵箱
 * @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 用戶(hù)注冊(cè)

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

總結(jié)

以上就是springboot實(shí)現(xiàn)郵箱驗(yàn)證碼登錄注冊(cè)的基本實(shí)現(xiàn),覺(jué)得有用的大家可以點(diǎn)點(diǎn)贊。

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

相關(guān)文章

  • java插入排序 Insert sort實(shí)例

    java插入排序 Insert sort實(shí)例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

柳江县| 北安市| 云浮市| 盐边县| 泸水县| 宜昌市| 阜宁县| 福泉市| 兴山县| 桃源县| 通州市| 贡山| 灌阳县| 修文县| 阳新县| 科尔| 平阴县| 桃园县| 灵璧县| 浦东新区| 东台市| 上虞市| 西平县| 天等县| 平凉市| 综艺| 宁城县| 玉田县| 怀远县| 谷城县| 买车| 错那县| 乐山市| 重庆市| 丰顺县| 林州市| 抚松县| 冀州市| 深水埗区| 霍城县| 桂林市|