spring项目使用邮箱验证码校验

2024-09-07 14:20

本文主要是介绍spring项目使用邮箱验证码校验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本项目采用免费QQ邮箱验证码方式进行登录安全的校验。

前期工作

申请邮箱安全授权码

打开QQ邮箱官网点击设置

进入设置页面后点击账户按钮

 进入账户后一直往下拉页面找到POP3服务栏,然后点击管理服务(如果没有开启服务需要先开启服务,按照邮箱提示操作即可)

进入管理服务页面后如果没有授权码,点击生成授权码,如果有即可进入授权码管理页面查看。

授权码过一段时间会自动过期,需要重新申请。

 

项目中导入邮箱依赖

复制以下maven坐标到项目中,maven会自动导入其他依赖的坐标

	<!--邮箱--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.5</version></dependency>

定义配置类

完整代码如下,有注解,我将需要修改的地方单独列在后面

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Properties;
import java.util.Random;@Controller
public class MailcodeServlet extends HttpServlet {private static final long serialVersionUID = 1L;// 得到随机的字符串,用于发送验证码的内容public String getNumbers(int size) {String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";String numString = "";Random r = new Random();for (int i = 0; i < size; i++) {char c = str.charAt(r.nextInt(str.length()));numString = numString + c;}return numString;}@RequestMapping("/email")public void email(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		response.setCharacterEncoding("UTF-8");// 设置返回的编码格式,同时设置客户端和服务端的编码格式response.setContentType("application/json; charset=UTF-8");String email = request.getParameter("email");System.out.println("email" + email);String emailString = getNumbers(5);System.out.println("验证码" + emailString);HttpSession session = request.getSession();session.setAttribute("email", email);session.setAttribute("emailString", emailString);// 创建Properties类用于记录邮箱的一些属性Properties props = new Properties();// 表示SMTP发送邮件,必须进行身份验证props.put("mail.smtp.auth", "true");// 此处填写SMTP服务器props.put("mail.smtp.host", "smtp.qq.com");// 端口号,QQ邮箱端口465或587props.put("mail.smtp.port", "587");// 此处填写,写信人的账号props.put("mail.user", "3131019721@qq.com");// 此处填写16位STMP口令props.put("mail.password", "qzsmlbypynsedc");// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = props.getProperty("mail.user");String password = props.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};// 使用环境属性和授权信息,创建邮件会话Session mailSession = Session.getInstance(props, authenticator);// 创建邮件消息MimeMessage message = new MimeMessage(mailSession);try {// 设置发件人InternetAddress form = new InternetAddress(props.getProperty("mail.user"));message.setFrom(form);// 设置收件人的邮箱InternetAddress to = new InternetAddress(email);message.setRecipient(MimeMessage.RecipientType.TO, to);// 设置邮件标题message.setSubject("资产管理系统验证码");// 设置邮件内容体message.setContent("验证码:" + emailString, "text/html;charset=UTF-8");// 发送邮件Transport.send(message);response.getWriter().write("{\"message\": \"验证码已发送,请查收!\"}");} catch (AddressException e) {session.setAttribute("messagesigh", "邮箱输入有误");e.printStackTrace();response.getWriter().write("{\"message\": \"发送验证码失败!\"}");} catch (MessagingException e) {session.setAttribute("messagesigh", "邮箱输入有误");e.printStackTrace();response.getWriter().write("{\"message\": \"发送验证码失败!\"}");}}
}

需要修改的地方,只需将写信人的账户改成自己的,然后在STMP口令,也就是申请的授权码复制即可。

	// 此处填写,写信人的账号props.put("mail.user", "3131019721@qq.com");// 此处填写16位STMP口令props.put("mail.password", "qzsmlbypynsedc");

前端Ajax代码

<!-- 验证码输入框 --><div class="form-group has-feedback"><input required type="text" name="captcha" class="form-control" id="captcha" placeholder="验证码"><span class="glyphicon glyphicon-question-sign form-control-feedback"></span></div>
<!-- 发送验证码的按钮 --><div class="form-group"><button type="button" class="btn btn-success" id="send-code">发送验证码</button></div><!-- jQuery代码 -->$(document).ready(function() {$('#send-code').click(function(e) {e.preventDefault(); // 防止表单的默认提交行为//获取输入框邮箱值var email = $('#email').val();//邮箱格式校验var emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;if (emailPattern.test(email)) {$.ajax({url: '/email',type: 'POST',data: { email: email},dataType: 'json',success: function(response) {console.log(response)},error: function(e) {console.log(e)}});} else {console.log("输入错误")}});});

这篇关于spring项目使用邮箱验证码校验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145304

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.