毕设IDEA2019之基于ssm的发送邮箱功能并实现验证码修改密码

实现向邮箱发送随机生成验证码,修改用户密码的功能。没什么好说的,进入正文。
前置条件:耐性100%;IDEA2019;SSM框架

Maven工程导入jar包

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.1</version>
    </dependency>
  </dependencies>

获取邮箱授权码(QQ邮箱为例)

设置>账户>开启POP3/SMTP服务>拿到邮箱授权码
在这里插入图片描述

创建资源文件

mail.properties

#服务器主机名 smtp.xx.com
mail.smtp.host=smtp.qq.com
mail.smtp.username=XXX@qq.com
#客户端授权码
mail.smtp.password=你的邮箱授权码
#编码字符
mail.smtp.defaultEncoding=utf-8
#是否进行用户名密码校验
mail.smtp.auth=true
#设置超时时间
mail.smtp.timeout=20000

调用资源文件

springMVC.xml OR applicationContext.xml

    <!--读取属性文件-->
    <context:property-placeholder location="classpath:mail.properties" ignore-unresolvable="true"/>

    <!--配置邮件接口-->
    <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.smtp.host}"/>
        <property name="username" value="${mail.smtp.username}"/>
        <property name="password" value="${mail.smtp.password}"/>
        <property name="defaultEncoding" value="${mail.smtp.defaultEncoding}"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
            </props>
        </property>
    </bean>

创建修改密码界面

这里css样式用到了bootstrap框架,可以先忽视,也可以戳了解一下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>找回密码</title>
    <link rel="icon" href="images/timg.jpg" type="image/x-icon">
    <link rel="stylesheet" href="css/modify.css" type="text/css">
    <link rel="stylesheet" href="css/bootstrap.css" type="text/css">
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <script type="text/javascript" src="js/modify.js"></script>
</head>
<body id="background">
<div class="container">
    <div class="row ">
        <div class="col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 div-background">
            <form action="user/updatepassword" title="找回密码" class="form-group" method="post">
                <p>
                    <label for="account">登录账号:</label>
                    <input class="form-control" id="account" placeholder="请输入账号" name="account" oninput="checkinput('account')">
                    <div id="account-tips"></div><div style="display: none"><input value="false" id="account-check"></div>
                </p>
                <p>
                    <label for="email">邮箱:</label>
                    <input class="form-control" id="email" placeholder="请输入邮箱" name="email" oninput="checkinput('email')">
                    <div id="email-tips"></div><div style="display: none"><input value="false" id="email-check"></div>
                </p>
                <p>
                    <label for="captcha">验证码:</label>
                    <input class="form-control" id="captcha" placeholder="请输入验证码" name="captcha" oninput="checkinput('captcha')">
                    <div id="captcha-tips"></div><div style="display: none"><input value="false" id="captcha-check"></div>
                    <input class="btn btn-info" type="button" value="获取验证码" id="get-captcha">
                </p>
                <p>
                    <label for="pwd">输入密码:</label>
                    <input class="form-control" id="pwd" placeholder="请输入密码" name="pwd" type="password" oninput="checkinput('pwd')" onfocus="$('#confirm-pwd').val('')">
                    <div id="pwd-tips"></div><div style="display: none"><input value="false" id="pwd-check"></div>
                </p>
                <p>
                    <label for="confirm-pwd">确认密码:</label>
                    <input class="form-control" id="confirm-pwd" placeholder="再次确认密码" name="confirm-pwd" type="password" oninput="checkinput('confirm-pwd')">
                    <div id="confirm-pwd-tips"></div><div style="display: none"><input value="false" id="confirm-pwd-check"></div>
                </p>
                <p>
                    <input class="btn btn-success" id="submit-btn" type="button" value="确认提交" disabled>
                </p>
            </form>
        </div>
    </div>
</div>
</body>
</html>

在这里插入图片描述

梳理找回密码流程

  1. 输入账号,输入邮箱;
  2. 点击按钮获取验证码;
  3. 判断邮箱是否为空,判断邮箱格式是否正确(这里按“xxx.@xx.com”格式);
  4. ajax异步请求控制器查找数据库中是否有该邮箱(注意:这里是没这么多邮箱,实际开发中应该要判断邮箱与账号一一对应);
  5. 控制器调用services方法调用对应dao访问数据库查找数据;
  6. 控制器根据查找的数据返回请求结果;
  7. false拒绝发送验证码,弹窗提示“该邮箱不能获取验证码”,true则异步请求控制器发送验证码;
  8. 控制器随机生成一组6位数验证码并存入session中,根据收到的邮箱地址发送验证码;
  9. 设置计时器,超过一分钟后异步请求删除session中的验证码(因为对session的生命周期不熟悉,所以这里调用方法来删除),并弹窗提示“请重新获取验证码”;
  10. 输入新密码和再次确认密码,两次密码一致且所有输入框不为空后释放提交按钮;
  11. 点击按钮提交表单;
  12. 判断输入的验证码和session中的一致,则更新数据库中的密码

创建控制器

SenEmailController 控制器

package com.qiang.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.Random;

/**
 * @author Mr.锵
 * date 2020-04-14
 */
@Controller
@RequestMapping("/email")
public class SenEmailController {

    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${mail.smtp.username}")
    private String emailFrom;

    @RequestMapping("/send")
    public @ResponseBody  Boolean  senMsg(HttpSession httpSession, @RequestParam String email){
        //生成六位数验证码
        String Captcha = String.valueOf(new Random().nextInt(899999) + 100000);
        httpSession.setAttribute("Captcha",Captcha);
        SimpleMailMessage message = new SimpleMailMessage();
        //发件人的邮箱地址
        message.setFrom(emailFrom);
        //收件人的邮箱地址
        message.setTo(email);
        //邮件主题
        message.setSubject("邮件的主题");
        //邮件内容
        message.setText("内容:"+Captcha);
        //发送邮件
        javaMailSender.send(message);
        return true;
    }
}

UserController控制器

@Controller
@RequestMapping("/user")
public class UserController {
	@Autowired
    private IUserService userService;
    @RequestMapping(value = "/updatepassword",method = RequestMethod.POST)
    public String  updatepassword(String account,String pwd){
        User1 user1=new User1();
        user1.setPhone(account);
        user1.setPassword(pwd);
        userService.updatepassword(user1);
        return "redirect:/";
    }
        @RequestMapping("/checkemail")
    public @ResponseBody boolean checkemail(String email){
        List<User1> checkemail = userService.checkemail(email);
        if(checkemail.size()!=0){
            return true;
        }else{
            return false;
        }
    }
    @RequestMapping("/checkcaptcha")
    public @ResponseBody boolean checkcaptcha(HttpSession httpSession,@RequestParam String captcha){
        String captcha1 = (String)httpSession.getAttribute("Captcha");
        if(captcha.equals(captcha1)){
            return true;
        }else {
            return false;
        }
    }
    @RequestMapping("/deletecaptcha")
    public @ResponseBody void deletecaptcha(HttpSession httpSession){
        httpSession.removeAttribute("Captcha");
    }
}

JavaScript实现异步请求

<Script>
$(function () {
    $("#get-captcha").click(function () {
        if($("#email").val()==""){
            alert("邮箱不能为空");
            $("#email").focus();
            return false;
        } else if($("#email").val().indexOf('@')=='-1'||$("#email").val().indexOf('.com')=='-1'){
            alert("请检查邮箱格式是否正确")
        } else{
            $.ajax({
                url:'user/checkemail',
                datatype : "json",
                type : "post",
                data:{
                    email:$("#email").val()
                },
                success:function (res) {
                    if(res==true){
                        $("#get-captcha").attr("disabled", true);
                        $("#get-captcha").val("发送中...");
                        $.ajax({
                            url:'email/send',
                            datatype : "json",
                            type : "post",
                            data:{
                                email:$("#email").val()
                            },
                            success:function (res) {
                                if(res){
                                    alert("验证码发送成功")
                                    var count = 60;
                                    var countdown = setInterval(CountDown, 1000);
                                    function CountDown() {
                                        $("#get-captcha").attr("disabled", true);
                                        $("#get-captcha").val(count + "s");
                                        if (count == 0) {
                                            $("#get-captcha").val("重新获取验证码").removeAttr("disabled");
                                            clearInterval(countdown);
                                            $.ajax({
                                                url : "user/deletecaptcha",
                                                datatype : "json",
                                                type : "post",
                                                success:function () {
                                                    alert("获取验证码失效,请重新获取")
                                                }
                                            })
                                        }
                                        count--;
                                    }
                                }
                            },error:function () {
                                alert("获取验证码失败")
                                $("#get-captcha").val("重新获取验证码").removeAttr("disabled");
                            }
                        })
                    }else{
                        alert("该邮箱不能获取验证码")
                    }

                }})
        }
    });
    $("#submit-btn").click(function () {
        $.ajax({
            url:"user/findPhone",
            data:{
                phone:$("#account").val()
            },
            dataType:"json",
            type:"post",
            success:function(result){
                if(result==true){
                    alert("没有该账号");
                    return false;
                }else{
                    $.ajax({
                        url:"user/checkcaptcha",
                        data:{
                            captcha:$("#captcha").val()
                        },
                        dataType:"json",
                        type:"post",
                        success:function (res) {
                            if(res==false){
                                alert("验证码不正确");
                                return false;
                            }else{
                                alert("修改成功")
                                $("form").submit();
                            }
                        }
                    })
                }
            }
        })
    });
function checkinput(id) {
    if($("#"+id+"").val()==""){
        $("#"+id+"-tips").html("");
        $("#"+id+"-tips").append("<h5 style='color:red'>不能为空!</h5>");
        $("#"+id+"-check").val("false");
    }else{
        if(id=='confirm-pwd'){
            if($("#"+id+"").val()!=$("#pwd").val()){
                $("#"+id+"-tips").html("");
                $("#"+id+"-tips").append("<h5 style='color:red'>两次密码不正确</h5>");
                $("#"+id+"-check").val("false");
            }else{
                $("#"+id+"-tips").html("");
                $("#"+id+"-check").val("true");}
        }else{
            $("#"+id+"-tips").html("");
            $("#"+id+"-check").val("true");
        }
    }
    if($("#account-check").val()=="true"&&$("#pwd-check").val()=="true"&&$("#email-check").val()=="true"&&$("#confirm-pwd-check").val()=="true"&&$("#captcha-check").val()=="true"){
        $("#submit-btn").removeAttr("disabled");
    }else{
        $("#submit-btn").attr("disabled", true);
    }
}
</Script>

结尾

发送邮箱的功能实现比较简单,建议JavaScript看多几遍,逻辑比较重要。

感觉有帮助就点个赞呗~

下一篇先用bootstrap框架画个主界面

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
好的,基于SSM框架的系统中,可以通过以下步骤来调用kaptcha来实现验证码功能: 1.首先需要在pom.xml文件中导入kaptcha的依赖,如下所示: ``` <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency> ``` 2.在Spring的配置文件(如applicationContext.xml)中添加kaptcha的配置,如下所示: ``` <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> <property name="config"> <bean class="com.google.code.kaptcha.util.Config"> <constructor-arg> <map> <entry key="kaptcha.border" value="no" /> <entry key="kaptcha.textproducer.font.color" value="black" /> <entry key="kaptcha.textproducer.char.space" value="5" /> <entry key="kaptcha.image.width" value="100" /> <entry key="kaptcha.image.height" value="40" /> <entry key="kaptcha.textproducer.font.size" value="30" /> <entry key="kaptcha.textproducer.char.length" value="4" /> <entry key="kaptcha.noise.color" value="black" /> <entry key="kaptcha.obscurificator.impl" value="com.google.code.kaptcha.impl.ShadowGimpy" /> </map> </constructor-arg> </bean> </property> </bean> ``` 3.在jsp页面中添加验证码的代码,如下所示: ``` <img src="${pageContext.request.contextPath}/captcha.jpg" onclick="this.src='${pageContext.request.contextPath}/captcha.jpg?'+Math.random();" /> <input type="text" name="code" /> ``` 其中,${pageContext.request.contextPath}表示项目的根路径。 4.在后台Controller中获取验证码并进行验证,如下所示: ``` @RequestMapping(value = "/login", method = RequestMethod.POST) public String login(HttpServletRequest request, HttpServletResponse response) { String code = request.getParameter("code"); String captcha = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY); if (StringUtils.isEmpty(code) || !code.equalsIgnoreCase(captcha)) { //验证码错误 return "login"; } //验证码正确 //其他逻辑处理 return "index"; } ``` 其中,com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY为kaptcha在Session中保存验证码的key值。 以上就是基于SSM框架的系统中调用kaptcha实现验证码功能的方法。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值