zoukankan      html  css  js  c++  java
  • springboot中通过发送验证码注册用户信息

    1)、先写一个注册页面和登录页面;

    register.html

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>用户注册</title>
    </head>
    <body>
    <form th:action="@{/register}" method="post">
        <div th:text="${msg}"></div>
        账号:<input type="text" name="account"> <br>
        邮箱:<input type="email" name="email"> <button id="sendCode">获取验证码</button><br>
        验证码:<input type="text" name="code"> <br>
        密码:<input type="password" name="password"> <br>
        手机号:<input type="text" name="phone"> <br>
        <input type="submit" value="注册">
    </form>
    <script  type="text/javascript" th:src="@{/js/jquery-3.2.1.min.js}"></script>
    <script>
        $(function ($) {
            $("#sendCode").click(function () {
                var email = $("input[name='email']").val();
                if(email){
                    $.get("/admin/sendCode",{"email":email},function (result) {
                        if(result.code==200){
                            alert("邮件发送成功,请登录邮箱获取");
                        }else{
                            alert("邮件发送失败,请稍后再试~")
                        }
                    })
                }else{
                    alert("请输入邮箱!")
                }
                return false;
            })
    
        })
    </script>
    </body>
    </html>

    login.html;

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>登录页面</title>
    </head>
    <body>
    <form th:action="@{/register}" method="post">
        用户名:<input type="text" name="account" /><br/>
        密码:<input type="password" name="password" /><br/>
        <input type="submit" value="登录"/>
    </form>
    </body>
    </html>

    2)写一个rabbitmq配置类;

    package com.seecen.redis.rabbitmq;
    
    
    
    import org.springframework.amqp.core.*;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 描述:
     *   rabbitmq 配置类
     *   1.配置交换机
     *   2.配置队列
     *   3.配置队列与交换机绑定关系
     *   4.配置RabbitTemplate
     */
    @Configuration
    public class RabbitConfig {
        //注入连接工厂
        @Autowired
        private ConnectionFactory connectionFactory;
        /**
         * 配置rabbitTemplate
         * @return
         */
        @Bean
        public RabbitTemplate rabbitTemplate(){
            RabbitTemplate rabbitTemplate =
                    new RabbitTemplate(connectionFactory);
            return rabbitTemplate;
        }
        /**
         * 定义队列
         * @return
         */
        @Bean
        public Queue emailQueue(){
            return new Queue("email.verifyCode");
        }
        /**
         * 定义交换机
         * @return
         */
        @Bean
        public DirectExchange emailExchange(){
            return new DirectExchange("email.exchange");
        }
    
        /**
         * 绑定队列到交换机
         * @return
         */
        @Bean
        public Binding emailVerifyCodeBinding(){
    
            return BindingBuilder.bind(emailQueue())//绑定队列
                    .to(emailExchange())//指定交换机
                    .with("email.verifyCode");//路由规则
        }
    }

    3)在控制层写一个发送验证码的方法和登录注册的方法;

    AdminController.java

    package com.seecen.redis.controller;
    
    import com.seecen.redis.entity.TAdmin;
    import com.seecen.redis.service.AdminService;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;
    import java.util.concurrent.TimeUnit;
    
    @RestController
    @RequestMapping("/admin")
    public class AdminController {
        @Autowired
        private RabbitTemplate rabbitTemplate;
        @Autowired
        private RedisTemplate redisTemplate;
    
        @GetMapping("/sendCode")
        public Map<String, Object> sendCode(String email){
            String key="verifyCode:" + email;
            Boolean exists = redisTemplate.hasKey(key);
            String code;
            if (exists){
                code = (String) redisTemplate.opsForValue().get(key);
            }else{
                Random random = new Random();
                code=random.nextInt(10000)+"";
                //将验证码放入redis缓存中,并设定超时时间为5分钟
                redisTemplate.opsForValue().set(key,code,5, TimeUnit.MINUTES);
                HashMap<String, String> msg = new HashMap<>();
                msg.put("email",email);
                msg.put("code",code);
                //发送消息
                rabbitTemplate.convertAndSend(
                        "email.exchange",//交换机
                        "email.verifyCode",//路由key
                        msg);//消息内容
            }
            HashMap<String, Object> result = new HashMap<>();
            result.put("code",200);
            result.put("msg","验证码发送成功!");
            return result;
        }
    }

    indexController.javapackage com.seecen.redis.controller;

    
    import com.seecen.redis.aop.Log;
    import com.seecen.redis.aop.LogType;
    import com.seecen.redis.entity.TAdmin;
    import com.seecen.redis.service.AdminService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.annotation.Resource;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    /**
     * @author bigpeng
     * @create 2020-07-21-16:18
     */
    @Controller
    @Slf4j
    public class IndexController {
        @Autowired
        private RedisTemplate redisTemplate;
        @Autowired
        private AdminService adminService;
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @GetMapping("/toRegister")
        public String toRegister(){
            return "register.html";
        }
    @PostMapping("/register") public String register(TAdmin tAdmin, String code, ModelMap modelMap){ //1.验证验证码是否正确 String cachedCode = (String) redisTemplate.opsForValue().get("verifyCode:" + tAdmin.getEmail()); if(!code.equals(cachedCode)){ modelMap.put("msg","验证码错误"); return "register.html"; } //2.验证用户名是否存在 TAdmin tAdmin1 = adminService.selectByAccount(tAdmin.getAccount()); if(tAdmin1!=null){ modelMap.put("msg","用户名已存在!"); return "register.html"; } //3、保存用户信息 adminService.insert(tAdmin); //4、将验证码删除 redisTemplate.delete("verifyCode:" + tAdmin.getEmail()); return "login.html"; } }

    4)测试,可以在数据库中查看是否注册成功;

  • 相关阅读:
    [CSP-S模拟测试]:F(DP+线段树)
    [CSP-S模拟测试]:E(贪心)
    [CSP-S模拟测试]:D(暴力+剪枝)
    [CSP-S模拟测试]:C(三分+贪心)
    [CSP-S模拟测试]:B(DP+数学)
    [CSP-S模拟测试]:A(数学)
    [CSP-S模拟测试]:密码(数位DP+库默尔定理)
    BZOJ3456 城市规划 【多项式求逆】
    多项式求逆
    uoj185 [ZJOI2016]小星星 【dp + 容斥】
  • 原文地址:https://www.cnblogs.com/xie-qi/p/13363979.html
Copyright © 2011-2022 走看看