深圳做微商网站的公司深圳福田网站建设
- 作者: 五速梦信息网
- 时间: 2026年04月20日 09:19
当前位置: 首页 > news >正文
深圳做微商网站的公司,深圳福田网站建设,网站首页框架图,企业网站seo外包 s⛰️个人主页: 蒾酒
#x1f525;系列专栏#xff1a;《spring boot实战》
#x1f30a;山高路远#xff0c;行路漫漫#xff0c;终有归途 目录
写在前面
上文衔接
内容简介 功能分析
所需依赖
邮箱验证登录/注册实现
1.创建交互对象
2.登录注册业务逻辑实…
⛰️个人主页: 蒾酒
系列专栏《spring boot实战》
山高路远行路漫漫终有归途 目录
写在前面
上文衔接
内容简介 功能分析
所需依赖
邮箱验证登录/注册实现
1.创建交互对象
2.登录注册业务逻辑实现 最近发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。 点击跳转到学习网站 写在前面
本文介绍了springboot开发后端服务中邮箱验证码登录/注册功能的设计与实现坚持看完相信对你有帮助。
同时欢迎订阅springboot系列专栏持续分享spring boot的使用经验。
上文衔接 本文衔接上文可以看一下 spring boot3登录开发-邮件验证码接口实现-CSDN博客 用户表设计如下 create table user
(id bigint auto_increment comment 主键primary key,user_name varchar(32) null comment 用户昵称,password varchar(255) null comment 密码,account varchar(64) null comment 账号,user_role varchar(252) default user null comment 用户角色user / admin,avatar varchar(1024) null comment 头像,create_time datetime default (now()) null comment 创建时间,update_time datetime default CURRENT_TIMESTAMP null comment 更新时间,is_delete tinyint(1) default 0 null comment 逻辑删除1删除/0存在,gender tinyint(1) null comment 性别,user_signature varchar(255) null comment 个性签名,status tinyint(1) default 1 not null comment 状态1正常0禁用,phone varchar(11) null comment 手机号,email varchar(100) null comment 邮箱
)comment 用户表; 内容简介
上文我们已经实现了邮件验证码的发送接口本文我们来实现这个邮箱验证登录/注册逻辑。 功能分析 邮箱未注册过则先注册注册完执行登录已经注册过的邮箱直接执行登录 所需依赖 redis Spring Boot3整合Redis_springboot3整合redis-CSDN博客 邮箱验证登录/注册实现
1.创建交互对象
用户登录/注册DTO
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.Data;/*** author mijiupro/
Data
public class UserEmailLoginDTO {NotBlank(message 邮箱不能为空)Pattern(regexp ^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$, message 邮箱格式不正确)private String email;NotBlank( message 验证码不能为空)private String captcha;} 这里用Lombok的Data来生成getter和setter。 这里用spring boot参数验证组件来检验参数格式 spring boot3参数校验基本用法_springboot3使用校验类注解-CSDN博客 用户登录VO
import lombok.Builder;
import lombok.Data;import java.io.Serializable;/** author mijiupro/
Data
Builder
public class UserLoginVO implements Serializable {private String token;//令牌private String userName;//用户名private String avatar;//头像
}
2.登录注册业务逻辑实现
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.mijiu.commom.enumerate.ResultEnum;
import com.mijiu.commom.exception.;
import com.mijiu.commom.model.dto.UserEmailLoginDTO;
import com.mijiu.commom.model.vo.UserLoginVO;
import com.mijiu.commom.util.JwtUtils;
import com.mijiu.entity.User;
import com.mijiu.mapper.UserMapper;
import com.mijiu.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;import java.util.Map;
import java.util.Objects;/*** p* 用户表 服务实现类* /p** author 蒾酒* since 2024-02-03*/
Service
Slf4j
public class UserServiceImpl extends ServiceImplUserMapper, User implements UserService {private final UserMapper userMapper;private final JwtUtils jwtUtils;private final StringRedisTemplate stringRedisTemplate;public UserServiceImpl(UserMapper userMapper, JwtUtils jwtUtils, StringRedisTemplate stringRedisTemplate) {this.userMapper userMapper;this.jwtUtils jwtUtils;this.stringRedisTemplate stringRedisTemplate;}Overridepublic UserLoginVO emailLogin(UserEmailLoginDTO userEmailLoginDTO) {// 校验验证码是否存在HashOperationsString, String, String hashOps stringRedisTemplate.opsForHash();String captcha hashOps.get(login:email:captcha: userEmailLoginDTO.getEmail(), captcha);if (StringUtils.isEmpty(captcha)) {log.error(手机号 {} 的验证码不存在或已过期, userEmailLoginDTO.getEmail());throw new CaptchaErrorException(ResultEnum.USER_CAPTCHA_NOT_EXIST);}// 查询用户是否已注册User loginUser new LambdaQueryChainWrapper(userMapper).eq(User::getPhone, userEmailLoginDTO.getEmail()).one();// 如果未注册则进行注册if (Objects.isNull(loginUser)) {loginUser registerByEmail(userEmailLoginDTO.getEmail());}// 校验验证码是否正确if (!userEmailLoginDTO.getCaptcha().equals(captcha)) {log.error(邮箱号 {} 的验证码错误, userEmailLoginDTO.getEmail());throw new CaptchaErrorException(ResultEnum.AUTH_CODE_ERROR);}//判断用户是否被禁用if (!loginUser.getStatus()) {throw new AccountForbiddenException(ResultEnum.USER_ACCOUNT_FORBIDDEN);}log.info(手机号 {} 用户登录成功,userEmailLoginDTO.getEmail());return UserLoginVO.builder().token(jwtUtils.generateToken(Map.of(userId, loginUser.getId()), user)).userName(loginUser.getUserName()).build();}// 用户邮箱注册private User registerByEmail(String email) {User user new User();user.setEmail(email);user.setUserName(email);user.setStatus(true);if (userMapper.insert(user) 1) {log.error(邮箱 {} 用户注册失败, email);throw new AccountRegisterFailException(ResultEnum.USER_REGISTER_FAIL);}log.info(邮箱 {} 用户注册成功, email);return user;}
}4.测试接口
使用swagger3进行测试 Spring Boot3整合knife4j(swagger3)_springboot3 knife4j-CSDN博客
调用邮箱验证码发送接口 调用邮箱验证登录接口 第一次登录所以也就自动注册成功了。 写在最后
springboot实现邮箱验证登录注册到这里就结束了本文介绍了一种通用的邮箱验证登录实现方式代码逻辑清晰。任何问题评论区或私信讨论欢迎指正。
- 上一篇: 深圳做网站做app视频剪辑培训机构哪个好
- 下一篇: 深圳做微商网站设计佛山市禅城网站建设
相关文章
-
深圳做网站做app视频剪辑培训机构哪个好
深圳做网站做app视频剪辑培训机构哪个好
- 技术栈
- 2026年04月20日
-
深圳做网站最好的公工信和信息化部网站
深圳做网站最好的公工信和信息化部网站
- 技术栈
- 2026年04月20日
-
深圳做网站三网合一网页和网站有什么关系
深圳做网站三网合一网页和网站有什么关系
- 技术栈
- 2026年04月20日
-
深圳做微商网站设计佛山市禅城网站建设
深圳做微商网站设计佛山市禅城网站建设
- 技术栈
- 2026年04月20日
-
深圳做物流网站搭建网站挣钱
深圳做物流网站搭建网站挣钱
- 技术栈
- 2026年04月20日
-
深圳做营销网站清理wordpress头部
深圳做营销网站清理wordpress头部
- 技术栈
- 2026年04月20日
