Java实现注册登录代码通用
注册逻辑
- 用户在前端输入账户和密码、校验码
- 校验用户的账户、密码、校验密码是否符合要求
- 非空
- 账户不小于4位
- 密码不小于8位
- 账户不能包含特殊字符
- 账户不能重复
- 密码和校验密码相同
- 对密码进行加密(不能以明文直接存储到数据库中)
- 向数据库插入数据
登录逻辑
- 接收参数:用户账户、密码
- 请求类型:post
- 请求体 json格式
- 返回值:用户信息(脱敏)
- 校验用户账户和密码是否合法
- 非空
- 账户密码不小于4位
- 密码不小于8位
- 账户不能包含特殊字符
- 校验密码是否正确 要和数据库中的密码
- 记录用户的登录态(Session),将其存到服务器上 (用后端SpringBoot 框架封装的服务器tomcat去记录) cookie
- 返回用户信息(脱敏) 隐藏敏感信息
在UserService接口中 写方法
public interface UserService extends IService<User> {/*** 用户注册* @param userAccount 用户账户* @param userPassword 用户密码* @param checkPassword 校验密码* @return 用户id*/long userRegister(String userAccount, String userPassword, String checkPassword);/*** 用户登录* @param userAccount* @param userPassword* @param request* @return 脱敏后的用户信息*/User userLogin(String userAccount, String userPassword, HttpServletRequest request);/*** 用户脱敏* @param originUser* @return*/User getSafetyUser(User originUser);/*** 用户注销* @param request* @return*/int userLogout(HttpServletRequest request);}
然后在实现类中 写具体的代码逻辑
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService{private static final String SALT = "sparrow";@Resourceprivate UserMapper userMapper;@Overridepublic long userRegister(String userAccount, String userPassword, String checkPassword) {//1.账户密码 校验密码不能为空if (StringUtils.isAnyBlank(userAccount, userPassword, checkPassword)) {return -1;}//2.账号不能小于4位if (userAccount.length() < 4) {return -1;}//3.用户密码不能小于8位if (userPassword.length() < 8 || checkPassword.length() < 8) {return -1;}//4.账户不能包含特殊字符String validPattern = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);if (matcher.find()) {return -1;}//5.密码和校验密码不能相同if (!userPassword.equals(checkPassword)) {return -1;}//6.账户不能重复QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("userAccount", userAccount);long count = userMapper.selectCount(queryWrapper);if (count > 0) {return -1;}//7.加密String encryptPassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes());//8.插入数据User user = new User();user.setUserAccount(userAccount);user.setUserPassword(userPassword);boolean saveResult = this.save(user);if (!saveResult) {return -1;}return user.getId();}@Overridepublic User userLogin(String userAccount, String userPassword, HttpServletRequest request) {// 1. 校验if (StringUtils.isAnyBlank(userAccount, userPassword)) {return null;}if (userAccount.length() < 4) {return null;}if (userPassword.length() < 8) {return null;}// 账户不能包含特殊字符String validPattern = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);if (matcher.find()) {return null;}// 2. 加密String encryptPassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes());// 查询用户是否存在QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("userAccount", userAccount);queryWrapper.eq("userPassword", encryptPassword);User user = userMapper.selectOne(queryWrapper); //满足这两条数据的 查询出来if (user == null) {log.info("user login failed,userAccount cannot match userPassword");return null;}//3.用户脱敏User safetyUser = getSafetyUser(user);//4.记录用户的登录态request.getSession().setAttribute(USER_LOGIN_STATE,safetyUser);return safetyUser;}/*** 用户脱敏* @param originUser* @return*/@Overridepublic User getSafetyUser(User originUser) {if (originUser == null) {return null;}User safetyUser = new User();safetyUser.setId(originUser.getId());safetyUser.setUsername(originUser.getUsername());safetyUser.setUserAccount(originUser.getUserAccount());safetyUser.setAvatarUrl(originUser.getAvatarUrl());safetyUser.setGender(originUser.getGender());safetyUser.setPhone(originUser.getPhone());safetyUser.setEmail(originUser.getEmail());safetyUser.setUserRole(originUser.getUserRole());safetyUser.setUserStatus(originUser.getUserStatus());safetyUser.setCreateTime(originUser.getCreateTime());return safetyUser;}/*** 用户注销* @param request*/@Overridepublic int userLogout(HttpServletRequest request) {// 移除登录态request.getSession().removeAttribute(USER_LOGIN_STATE);return 1;}}
return null 和return -1可以自定义异常类来throw 打印信息
Java实现注册登录代码通用相关推荐
- java注册提示,java提示注册成功代码
JAVA编程语言中,使用数组完成简单的登陆注册功能_计算机软件及应用_IT/计算机_专业资料.. JAVA 编程语言中,使用数组完成简单的登陆注册功能 Java 是一种可以撰写跨...... Java ...
- Java实现注册登录系统——基于Java Swing实现
技术简介:Java Swing 介绍 Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. ...
- java实现注册登录版五子棋对战平台(超详细注释,内含人机实现)
目录 前言 项目介绍 功能演示 登录 注册 选择对手 落子提示 局时步时 查看战绩 落子五连 悔棋 聊天 新局 棋谱 保存棋谱 打开棋谱 其它功能 刷新 上下页 认输 退出 轮播图片 背景音乐 求助小 ...
- java手机验证码登录代码_java web实现手机短信验证码登录实例
运行环境 jdk7+tomcat7 项目技术(必填) Servlet+Ajax+Bootstrap 数据库文件 我这里没用到数据库,比较简单,如果需要用到数据库不会的话可以私信我或者加我QQ jar包 ...
- 使用java实现注册登录信息验证
编写java工具包,用来验证字符串格式和获取登录注册验证码.然后再编写注册窗口,实现注册验证功能. 一.编写工具包 1.编写字符串验证类 考虑到进行字符串验证时,用户会根据不同需求从而需要不同的验证方 ...
- php注册登录代码初学,php 用户注册实例代码,适合初学者_PHP教程
php教程 用户注册实例代码,适合初学者 if($_POST[submit]){ checkusername($_POST[username]); if($_SESSION["code&qu ...
- java ssm框架登录代码,求一个SSM框架登录功能的源码,要求能运行成功
[XML] 纯文本查看 复制代码<?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="htt ...
- java servlet 注册登录,JSP+JavaBean+Servlet实现用户登录与注册
数据库 create database student; use student; create table user( id int primary key auto_increment, user ...
- Unity3D制作注册登录界面,并实现场景跳转
效果预览图片: 效果预览视频: 一.新建项目工程 1.打开Unity3D,新建一个项目,将其命名为"Login".我这里用的版本是Unity2018.4.2f1,不同版本制作过程中 ...
最新文章
- vue虚拟don diff原理
- 安装RRDtool 1.4.5
- C#中的 具名参数 和 可选参数
- 虚拟仪器软件LabView使用初步了解
- 初探 NS_STRING_ENUM
- 如何用crontab每隔1分钟执行一个命令行脚本
- geojson在线生成工具_logofree详解:LOGO设计在线生成
- “2019大数据与实体经济深度融合全国行”盛大启动
- 【离散数学】实验 一个简单的自动逻辑推理问题
- 企业五年后卓越或者死亡,数据战略是关键!
- 万万没想到之抓捕孔连顺
- 基于SSM的电影购票系统
- Python使用matplotlib可视化模拟学生课程分数雷达图
- in use 大学英语4word_(完整word版)全新版大学英语第四册综合教程课后翻译答案及课文译文...
- 【案例】CRM客户管理系统的登录模型
- 实现一个小程序分享图 wxml2canvas
- CAD中插入外部参照字体会变繁体_为什么CAD插入外部参照时有些文字消失了?
- 计算机中完成全选的快捷键,怎么全选-很实用!word中全选的快捷键介绍及使用方法...
- 考研政治---马克思主义基本原理概论---唯物史观
- 一文解决C语言运算符的优先性与结合性——Think like a computer