码迷,mamicode.com
首页 > 编程语言 > 详细

springboot中通过发送验证码注册用户信息

时间:2020-07-23 09:16:44      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:new   public   current   set   验证   bsp   sel   pass   jquer   

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)测试,可以在数据库中查看是否注册成功;

 

springboot中通过发送验证码注册用户信息

标签:new   public   current   set   验证   bsp   sel   pass   jquer   

原文地址:https://www.cnblogs.com/xie-qi/p/13363979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!