网站开发的好处/建网站的详细步骤

网站开发的好处,建网站的详细步骤,苏州手机网站建设,丹东淘宝做网站文章目录 依赖配置开启 QQ 邮箱 SMTP 服务配置文件代码实现验证码服务邮件服务接口实现执行流程 依赖配置 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…

文章目录

    • 依赖配置
    • 开启 QQ 邮箱 SMTP 服务
    • 配置文件
    • 代码实现
      • 验证码服务
      • 邮件服务
      • 接口实现
      • 执行流程

依赖配置

<dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Redis 集成依赖  -->  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-redis</artifactId>  <version>3.4.2</version>  </dependency>  <dependency>  <groupId>org.apache.commons</groupId>  <artifactId>commons-pool2</artifactId>  <version>2.11.1</version>  </dependency>  <dependency>  <groupId>io.lettuce</groupId>  <artifactId>lettuce-core</artifactId>  <version>6.3.2.RELEASE</version>  </dependency><!-- 邮件发送支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- 验证码生成工具 --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency>
</dependencies>

开启 QQ 邮箱 SMTP 服务

  1. 打开浏览器,登录到 QQ 邮箱。
  2. 点击左上角的齿轮按钮,进入设置页面,见下图:
    QQMailHeader4. 在设置中找到“第三方服务”,激活 IMAP/SMTP(默认为禁用),并生成独立的 SMTP 授权码。 MailBoxSetting

配置文件

spring:  data:  redis:  host: your_redis_hostport: your_redis_port # 通常为6379password: your_redis_passwordlettuce:  pool:  max-active: 8 # 最大连接数  max-idle: 8 # 最大空闲连接数  min-idle: 0 # 最小空闲连接数  max-wait: 100 # 连接等待时间  mail:  host: smtp.qq.com  port: 465  username: your_qq_account@qq.compassword: 111 # 输入 QQ 邮箱的授权码properties:  mail:  smtp:  ssl:  enable: true  # QQ 邮箱需要开启 SSLauth: true

代码实现

验证码服务

使用 Redis 缓存验证码并实现验证码的校验功能:

@Service  
public class CaptchaService {  @Autowired  private StringRedisTemplate redisTemplate;  /**  * 生成验证码  * @param email 目标邮箱  * @return 生成的验证码  */  public String generateCaptcha(String email) { // 生成验证码  String code = RandomStringUtils.randomNumeric(6);  redisTemplate.opsForValue().set(  "CAPTCHA:" + email,  code,  Duration.ofMinutes(5)  // 验证码有效期为5分钟  );  return code;  }  /**  * 验证码校验  * @param email 邮箱  * @param code 验证码  * @return 是否验证通过  */  public boolean validateCaptcha(String email, String code) {  String captcha = redisTemplate.opsForValue().get("CAPTCHA:" + email);  return captcha != null && captcha.equals(code);  }  
}

邮件服务

@Service  
public class EmailService {  @Autowired  private JavaMailSender mailSender;  /**  * 发送验证码邮件  * @param email 收件人邮箱  * @param authCode 验证码  */  public void sendCaptchaEmail(String email, String authCode) {  SimpleMailMessage message = new SimpleMailMessage();  message.setFrom("your_qq_account@qq.com");  message.setTo(email);  message.setSubject("验证码");  message.setText("您的验证码是:" + authCode + ",有效期为5分钟");  mailSender.send(message);  }
}

接口实现

@RestController  
public class AuthController {  @Autowired  private UserService userService;  @Autowired  private CaptchaService captchaService;  @Autowired  private EmailService emailService;  /**  * 注册接口  * @param userDTO 用户信息  * @param captcha 验证码  * @return 注册结果  */  @PostMapping("/register")  public Result register(@RequestBody UserDTO userDTO, @RequestParam String captcha) {  if (!captchaService.validateCaptcha(userDTO.getEmail(), captcha)) {  return Result.error("验证码错误");  }  userService.register(userDTO);  return Result.success();  }  /**  * 登录接口  * @param userDTO 用户信息  * @return 登录结果  */  @PostMapping("/login")  public Result login(@RequestBody UserDTO userDTO) {  User user = userService.login(userDTO);  if (user == null) {  return Result.error("用户不存在");  }  // 登录成功,生成 JWT 令牌  Map<String, Object> claims = new HashMap<>();  claims.put("userId", user.getId());  String token = JwtUtils.createJWT("secretKey", 60000, claims);  UserVO userVO = new UserVO();  BeanUtils.copyProperties(user, userVO);  LoginResponse loginResponse = new LoginResponse(userVO, token);  return Result.success(loginResponse);  }  /**  * 发送验证码接口  * @param email 邮箱地址  * @return 发送结果  */  @PostMapping("/send-code")  public Result sendCode(@RequestParam String email) throws MessagingException {  // 校验邮箱格式if (!RegexUtils.isEmailValid(email)) {  return Result.error("邮箱格式非法");  }  String code = captchaService.generateCaptcha(email);  emailService.sendCaptchaEmail(email, code);  return Result.success();  }  
}

执行流程

  1. 用户输入邮箱,调用 /send-code 接口获取验证码。
  2. 用户填写验证码并调用 /register 接口进行注册。
  3. 系统校验验证码,验证成功则注册,失败则返回错误信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Effective Objective-C》阅读笔记(下)

目录 内存管理 理解引用计数 引用计数工作原理 自动释放池 保留环 以ARC简化引用计数 使用ARC时必须遵循的方法命名规则 变量的内存管理语义 ARC如何清理实例变量 在dealloc方法中只释放引用并解除监听 编写“异常安全代码”时留意内存管理问题 以弱引用避免保留环 …

【AD】3-10 原理图PDF导出

文件—智能PDF 多页原理图导出 导出设置时选择工程&#xff0c;可自行选择导出一页或多页原理图&#xff0c;一般PCB不用导出

【在线用户监控】在线用户查询、强退用户

文章目录 在线用户监控在线用户监控API(RestController)当前在线会话在线用户查询强退用户知识扩展: JwtJwtTokenUtil生成jwt解析token登录授权的实现:json web token + redis + springboot在线用户监控 在线用户监控API(RestController) @RestController @Tag(name = &qu…

超详细,多图文介绍redis集群方式并搭建redis伪集群

超详细&#xff0c;多图文介绍redis集群方式并搭建redis伪集群 超多图文&#xff0c;对新手友好度极好。敲命令的过程中&#xff0c;难免会敲错&#xff0c;但为了截好一张合适的图&#xff0c;一旦出现一点问题&#xff0c;为了好的演示效果&#xff0c;就要从头开始敲。且看且…

992. K 个不同整数的子数组

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 2.2 代码尝试 class Solution { public:int subarraysWithKDistinct(vector<int>& nums, int k) {//需要有数据结构来存储数组…

领域驱动设计:事件溯源架构简介

概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…

PT2035 TWS 蓝牙耳机双触控双输出 IC

1. 产品概述 PT2035 是一款支持入耳检测的蓝牙耳机专用触摸芯片&#xff0c;该芯片具有宽工作电压、低功耗、高抗 干扰能力的特性。 2. 主要特性 工作电压范围&#xff1a; 2.4~5.5V 待机电流约 2.5uAV DD3V/CMOD5nF 入耳有效&#xff0c;无触摸时工作电流约 8uAV DD3…

AI编程界的集大成者——通义灵码AI程序员

一、引言 随着软件行业的快速发展和技术的进步&#xff0c;人工智能&#xff08;AI&#xff09;正在成为软件开发领域的一个重要组成部分。近年来&#xff0c;越来越多的AI辅助工具被引入到开发流程中&#xff0c;旨在提高效率、减少错误并加速创新。在这样的背景下&#xff0…

Rocky Linux 8.5 6G内存 静默模式(没图形界面)安装Oracle 19C

Oracle19c 下载地址 Database Software Downloads | Oraclehttps://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_ee 目录 一、准备服务器 1、服务器可以克隆、自己装 2、修改主机名 3、重启 4、关闭selinux 5、关闭防火墙 5.1、…

lua基础语法学习

lua基础语法学习 文章目录 lua基础语法学习1. 基础2. 输入输出3. 分支结构与循环结构4. 函数5. 元表与元方法6. 面向对象 1. 基础 注释 --单行注释--[[ 多行注释 --]]标识符 标识符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上 0 个或多个字母&#xff0c;下划线&…

使用DeepSeek实现自动化编程:类的自动生成

目录 简述 1. 通过注释生成C类 1.1 模糊生成 1.2 把控细节&#xff0c;让结果更精准 1.3 让DeepSeek自动生成代码 2. 验证DeepSeek自动生成的代码 2.1 安装SQLite命令行工具 2.2 验证DeepSeek代码 3. 测试代码下载 简述 在现代软件开发中&#xff0c;自动化编程工具如…

【SpringBoot】数据访问技术spring Data、 JDBC、MyBatis、JSR-303校验

Spring Boot 数据访问技术及特性 目录标题 Spring Boot 数据访问技术及特性摘要1. 引言2. Spring Data架构与原理2.1 Spring Data概述2.2 Spring Data核心组件2.3 Spring Boot与Spring Data的集成机制 3. Spring Boot与JDBC的整合3.1 JDBC整合流程3.2 数据源自动配置3.3 JdbcTe…

JVM线程分析详解

java线程状态&#xff1a; 初始(NEW)&#xff1a;新创建了一个线程对象&#xff0c;但还没有调用start()方法。运行(RUNNABLE)&#xff1a;Java线程中将就绪&#xff08;ready&#xff09;和运行中&#xff08;running&#xff09;两种状态笼统的称为“运行”。 线程对象创建…

spring整合mybatis详细步骤

spring整合mybatis的全部过程(整合方式一 &#xff1a;简单版) 1.在pom.xml中导入mybatis相应的jar包&#xff1a; (2) < dependency > < groupId >org.mybatis</ groupId > < artifactId >mybatis</ artifactId > < version >3.5.3&…

ai-2、机器学习之线性回归

机器学习之线性回归 1、机器学习2、线性回归2.1、梯度下降法 3、python下调用scikit-learn 1、机器学习 2、线性回归 ####所以y可以当成我们需要的结果&#xff0c;根据公式可以求的y一撇的值更小&#xff0c;所以更接近需要的结果&#xff0c;所以y一撇拟合性更好 2.1、梯度下…

Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存

Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 目录 Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 一、简单介绍 二、简单介绍 camera 三、安装 camera 四、简单案例实现 五、关键代码 一、简单…

【造个轮子】使用Golang实现简易令牌桶算法

本文目录 1. 令牌桶算法2. 调用第三方库实现令牌桶3. 手撕令牌桶 前言&#xff1a;之前在Bluebell社区项目中&#xff0c;我们使用了开源的库来实现令牌桶限流&#xff0c;这次我们试着使用Go来手撕实现下令牌桶算法。 1. 令牌桶算法 为了防止网络拥塞&#xff0c;需要限制流…

C#开发的Base64编码及解码完整源码及注意事项

在软件开发时&#xff0c;经常用Base64编码和解码功能。本文介绍一个简单易用的Base64 编码和解码工具&#xff0c;顾名思义&#xff0c;就是简单快捷地进行 Base64 代码的解码或编码操作。您的数据可以轻松地编码为 Base64 编码&#xff0c;也可以解码为可读的格式。传输数据时…

【Linux第一弹】Linux基础指令(上)

目录 1.ls指令 1.1 ls使用实例 2.pwd指令 3.cd指令 3.1 cd使用实例 4.touch指令 4.1touch使用实例 5.mkdir指令 5.1mkdir使用实例 6.rmdir指令和rm指令 6.1 rmdir指令使用实例->: 6.2 rm指令使用实例 7.man指令 8.cp指令 8.1 cp 使用实例 9.mv指令 9.1mv使用…

图片爬取案例

修改前的代码 但是总显示“失败” 原因是 修改之后的代码 import requests import os from urllib.parse import unquote# 原始URL url https://cn.bing.com/images/search?viewdetailV2&ccidTnImuvQ0&id5AE65CE4BE05EE7A79A73EEFA37578E87AE19421&thidOIP.TnI…