注册逻辑

  • 用户在前端输入账户和密码、校验码
  • 校验用户的账户、密码、校验密码是否符合要求
    1. 非空
    2. 账户不小于4位
    3. 密码不小于8位
    4. 账户不能包含特殊字符
    5. 账户不能重复
    6. 密码和校验密码相同
  • 对密码进行加密(不能以明文直接存储到数据库中)
  • 向数据库插入数据

登录逻辑

  • 接收参数:用户账户、密码
  • 请求类型:post
  • 请求体 json格式
  • 返回值:用户信息(脱敏)
  • 校验用户账户和密码是否合法
    1. 非空
    2. 账户密码不小于4位
    3. 密码不小于8位
    4. 账户不能包含特殊字符
    5. 校验密码是否正确 要和数据库中的密码
    6. 记录用户的登录态(Session),将其存到服务器上 (用后端SpringBoot 框架封装的服务器tomcat去记录) cookie
    7. 返回用户信息(脱敏) 隐藏敏感信息

在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实现注册登录代码通用相关推荐

  1. java注册提示,java提示注册成功代码

    JAVA编程语言中,使用数组完成简单的登陆注册功能_计算机软件及应用_IT/计算机_专业资料.. JAVA 编程语言中,使用数组完成简单的登陆注册功能 Java 是一种可以撰写跨...... Java ...

  2. Java实现注册登录系统——基于Java Swing实现

    技术简介:Java Swing 介绍 Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. ...

  3. java实现注册登录版五子棋对战平台(超详细注释,内含人机实现)

    目录 前言 项目介绍 功能演示 登录 注册 选择对手 落子提示 局时步时 查看战绩 落子五连 悔棋 聊天 新局 棋谱 保存棋谱 打开棋谱 其它功能 刷新 上下页 认输 退出 轮播图片 背景音乐 求助小 ...

  4. java手机验证码登录代码_java web实现手机短信验证码登录实例

    运行环境 jdk7+tomcat7 项目技术(必填) Servlet+Ajax+Bootstrap 数据库文件 我这里没用到数据库,比较简单,如果需要用到数据库不会的话可以私信我或者加我QQ jar包 ...

  5. 使用java实现注册登录信息验证

    编写java工具包,用来验证字符串格式和获取登录注册验证码.然后再编写注册窗口,实现注册验证功能. 一.编写工具包 1.编写字符串验证类 考虑到进行字符串验证时,用户会根据不同需求从而需要不同的验证方 ...

  6. php注册登录代码初学,php 用户注册实例代码,适合初学者_PHP教程

    php教程 用户注册实例代码,适合初学者 if($_POST[submit]){ checkusername($_POST[username]); if($_SESSION["code&qu ...

  7. java ssm框架登录代码,求一个SSM框架登录功能的源码,要求能运行成功

    [XML] 纯文本查看 复制代码<?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="htt ...

  8. java servlet 注册登录,JSP+JavaBean+Servlet实现用户登录与注册

    数据库 create database student; use student; create table user( id int primary key auto_increment, user ...

  9. Unity3D制作注册登录界面,并实现场景跳转

    效果预览图片: 效果预览视频: 一.新建项目工程 1.打开Unity3D,新建一个项目,将其命名为"Login".我这里用的版本是Unity2018.4.2f1,不同版本制作过程中 ...

最新文章

  1. vue虚拟don diff原理
  2. 安装RRDtool 1.4.5
  3. C#中的 具名参数 和 可选参数
  4. 虚拟仪器软件LabView使用初步了解
  5. 初探 NS_STRING_ENUM
  6. 如何用crontab每隔1分钟执行一个命令行脚本
  7. geojson在线生成工具_logofree详解:LOGO设计在线生成
  8. “2019大数据与实体经济深度融合全国行”盛大启动
  9. 【离散数学】实验 一个简单的自动逻辑推理问题
  10. 企业五年后卓越或者死亡,数据战略是关键!
  11. 万万没想到之抓捕孔连顺
  12. 基于SSM的电影购票系统
  13. Python使用matplotlib可视化模拟学生课程分数雷达图
  14. in use 大学英语4word_(完整word版)全新版大学英语第四册综合教程课后翻译答案及课文译文...
  15. 【案例】CRM客户管理系统的登录模型
  16. 实现一个小程序分享图 wxml2canvas
  17. CAD中插入外部参照字体会变繁体_为什么CAD插入外部参照时有些文字消失了?
  18. 计算机中完成全选的快捷键,怎么全选-很实用!word中全选的快捷键介绍及使用方法...
  19. 考研政治---马克思主义基本原理概论---唯物史观
  20. 一文解决C语言运算符的优先性与结合性——Think like a computer

热门文章

  1. vue 项目输入框中 用 oninput
  2. Android仪表盘组件,Android自定义控件-椭圆形仪表盘
  3. layui 数据表格+分页
  4. vue css /deep/ 穿透
  5. DS1302时钟芯片(51单片机)
  6. 北京信息科技大学Linux,北京信息科技大学Linux实验报告3
  7. Mysql脚本循环批量插入数组数据
  8. Mac下快速搭建PHP开发环境
  9. 爬虫获取视频基础教程
  10. 基于FRR全面解析BGP协议(八):FRR配置实例