• Spring boot 使用QQ邮箱进行一个验证登入


    Spring boot 使用QQ邮箱进行一个验证登入

    QQ邮箱开启权限

    在QQ邮箱设置->账户里面,往下拉找到这个开启,手机号验证成功后会有一串英文字符串是待会儿要用到的密码。

    image-20221015161413724

    prom.xml 添加依赖

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-mailartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    在application.yml配置文件中对邮箱进行一个配置

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/community?useUnicode=true&characterEncoding=utf8&useSSL=false
        username: root
        password: 123456
      mail:
        host: smtp.qq.com
        username: 自己的qq@qq.com
        password: 刚刚QQ邮箱那生成的那个字符串,不是邮箱密码
        default-encoding: UTF-8
        thymeleaf:
            cache: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    创建发送验证码的请求Controller

    使用session存放验证码。后面通过获取得到进行一个验证

    package com.example.community.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.annotation.Resource;
    import javax.mail.MessagingException;
    import javax.mail.internet.MimeMessage;
    import javax.servlet.http.HttpSession;
    
    @Slf4j
    @RestController()
    @RequestMapping("/mail")
    @CrossOrigin(origins = {"http://localhost:8090", "null"})
    public class MailController {
        final String from="527734202@qq.com";
        @Resource
        JavaMailSender javaMailSender;
        @GetMapping("/sendMail")
        public void sendMail(String email , HttpSession session){
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            try {
                MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
    //            设置发件人
                mimeMessageHelper.setFrom(from);
    //            设置收件人
                mimeMessageHelper.setTo(email);
    //            设置邮件主题
                mimeMessageHelper.setSubject("信息管理验证");
                //生成随机数
                String random = randomInteger();
                //将随机数放置到session中
                session.setAttribute("email",email);
                session.setAttribute("code",random);
    
    //            设置验证码的样式
                mimeMessageHelper.setText(""+random+"",true);
    
                javaMailSender.send(mimeMessage);
    
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
        //生成随机数
        public String randomInteger(){
            String random = "";
            for (int i = 0; i < 6; i++) {
                random += (int)(Math.random()*10);
            }
            return random.toString();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    前端通过发送GET请求获取验证码,后台发送给用户邮箱。

    注意代码中的细节,一定要使用@Resource注解,不然就会报错。

    注册,登录验证

    如果验证码正确,允许用户进行登入和注册。部分代码样例。

    @PostMapping("/register")
    public R register(@RequestBody User user, HttpSession session) {
        String code1 = (String) session.getAttribute("code");
        String email1 = (String) session.getAttribute("email");
        if (!email1.equals(user.getEmail())) {
            return R.error("邮箱错误");
        }
        if (!code1.equals(user.getCode())) {
            return R.error("验证码错误");
        }
        User user1 = new User(user.getEmail(), user.getPassword());
        return service.register(user1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    是不是很简单

  • 相关阅读:
    java线程池 面试题(精简)
    Docker Compose详细教程(从入门到放弃)
    java 字符串只保留数字、字母、中文
    架构设计方法(4A架构)-信息架构
    对话永洪科技CEO何春涛:专注BI,决胜AI时代丨数据猿专访
    深度学习 | Attention与Transformer
    python(43) dbf文件读写
    使用playright自动下载vscode已安装插件
    Jmeter性能测试插件jpgc的安装
    VoLTE端到端业务详解 | 基本概念
  • 原文地址:https://blog.csdn.net/weixin_51009975/article/details/127337443