Springboot实现简单登录
全部代码:
链接:https://pan.baidu.com/s/1dFQOXLhVwQyHHqVTUvQFEw
提取码:thk6
登录流程
1.浏览器发起请求获取验证码
2.接收请求,生成验证码,保存到redis中,设置过期时间5分钟,返回浏览器
3.浏览器输入用户名,密码,验证码,uuid
4.接收请求,通过用户名到数据库中查询用户
5.数据库返回数据库,判断用户是否存在
6.从通过uuid到redis中查询验证码和浏览器传入的验证码进行对比,判断验证码是否一样
7.判断密码是否一样
8.判断账户是否被禁用
9.Jwt生成touken
10.以token为key,用户id为value保存到redis中,设置过期时间30分钟
11.修改数据库当前登录对象信息
12.返回token到浏览器
部分代码:
package com.thk.controller;import com.thk.constant.Constant; import com.thk.domain.People; import com.thk.domain.login.LoginUser; import com.thk.service.IPeopleService; import com.thk.utils.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Date; import java.util.HashMap;@RestController public class LoginController {@Resource//redis工具类private RedisUtil redisUtil;@Autowiredprivate getVerificationCode getVerificationCode;@Autowiredprivate IPeopleService peopleService;@RequestMapping("/login")public AjaxResult login(@RequestBody LoginUser loginUser) {AjaxResult ajax = AjaxResult.success();String code = loginUser.getCode();String uuid = loginUser.getUuid();if (StringUtils.isEmpty(loginUser.getCode()) && StringUtils.isEmpty(loginUser.getUuid())) {//删除验证码redisUtil.del(uuid);return AjaxResult.error("验证码不能为空!");}//验证验证码if (!verifyCode(code, uuid)) {//删除验证码redisUtil.del(uuid);return AjaxResult.error("验证码不正确,请重新输入!");}//查询登录对象People people = peopleService.selectByUserName(loginUser.getUserName());if (StringUtils.isNull(people)) {//删除验证码redisUtil.del(uuid);return AjaxResult.error("登录用户不存在");}//判断密码if (!verifyPassword(loginUser.getPwd(), people.getPwd())) {//删除验证码redisUtil.del(uuid);return AjaxResult.error("对不起,您的账号密码不正确,请重新输入");}//判断状态if (people.getStatus().equals(Constant.DISABLED)) {//删除验证码redisUtil.del(uuid);return AjaxResult.error("对不起,您的账号已经停用,请联系管理员");}//生成tokenString token = JwtUtil.getToken();//保存redis(token,对象)redisUtil.set(token, people.getId(), Constant.LOGIN_USER_DETE);//返回tokenajax.put("token", token);//删除验证码redisUtil.del(uuid);//修改当前登录对象updatePeople(people);return ajax;}/*** 获取验证码** @return*/@GetMapping("/getCode")public AjaxResult getCode() {HashMap<String, String> number = getVerificationCode.getNumber();number.forEach((k, v) -> {redisUtil.set(k, v, Constant.CODE_DETE);});return AjaxResult.success(number);}/*** 判断验证码是否一致** @param key* @param code* @return*/public boolean verifyCode(String key, String code) {//从redis中取出key和value进行比对Object o = redisUtil.get(key);if (o != null) {if (o.equals(code)) {return true;}}return false;}/*** 判断密码是否一致** @param value1 前端传入的值* @param value2 数据库查询的值* @return*/public boolean verifyPassword(String value1, String value2) {String hash = Md5Utils.hash(value1);if (hash.equals(value2)) {return true;} else {return false;}}}
测试:
获取验证码:
登录
通过token查询全部用户
请求头中没有token
携带token访问
Springboot实现简单登录相关推荐
- SpringBoot+layui实现简单登录(项目创建+前后端配置)
后端技术 开发工具 IDEA Java 1.8 项目构建 spring boot 2.6.7 项目管理 maven 3.6.3 持久层 mybatis-plus 3.5.0 数据库 MySQL 8.0 ...
- JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)
JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入) 开发流程:需求文档 接口文档 效果图 开发环境统一:JDK1.8 IDEA win10 GIT SSM SSH SpringB ...
- 快速上手Springboot项目(登录注册保姆级教程)
本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...
- React + UmiJS: 实现简单登录鉴权
在之前的文章Spring WebFlux (7): Springboot Security+jwt登录鉴权实现了后端的鉴权登录,只是通过postman进行了测试,本篇以此为基础通过reactjs和um ...
- SpringBoot 实现并发登录人数控制
作者丨殷天文 www.jianshu.com/p/b6f5ec98d790 今天跟大家分享SpringBoot 实现并发登录人数控制的知识. 1 SpringBoot 实现并发登录人数控制 通常系统都 ...
- 微信小程序+SpringBoot实现用户登录
微信小程序+SpringBoot实现用户登录 前言 微信小程序越来越吃香了(前话就这么多,嘿嘿) 前端 那就开始吧,登录界面就如此了 wxml内容如下,这是格式化后粘贴过来的,emmm,怪像那回事. ...
- 【ADO.NET】2、各种版本的 简单登录验证
一.简单登录验证(防SQL注入) GetString(序号) 返回某一列的值(当用户不记得列名序号时,可使用GetOrdinal()获取到序号) GetInt32(序号) 针对的是 int 字段,返回 ...
- 纯JSP实现简单登录跳转
1.JSP介绍 JSP即Java Server Pages,JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑.网页还能通过tags和script ...
- jsp oracle 登录页面,Oracle数据库之ORACLE+Myeclipse+jsp实现简单登录功能
本文主要向大家介绍了Oracle数据库之ORACLE+Myeclipse+jsp实现简单登录功能,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库表的建立: c ...
最新文章
- win7修改网络计算机名字,小编分析win7系统修改计算机名字的操作方法
- iOS开发多线程篇—多线程简单介绍
- 0362计算机应用基础在线考试,0362《计算机应用基础》(本科)2017年6月期末考试指导.doc...
- 架空输电线路运行规程_架空输电线路杆塔金具的种类
- ##连接符和#符的使用
- 关于自定义控件,可以编译通过,但是用时提示无法创建新实例。
- c++重载、覆盖和隐藏
- 在Redis集群技术上,你不可错过的四大集成者
- java编写singleton程序_java – 在Singleton实现中初始化按需成语与简单静态初始化程序...
- 智能对话机器人产品之 IBM Watson 三年投资回报率 383% | Chatopera
- 联想微型计算机boot,联想电脑一体机硬盘启动模式怎么设置
- 高德地图样式主题设置
- golang中channal容量的问题
- python下对bin文件的处理
- 倍福beckhoff详细知识库展示
- php工具能自动出代码的,打造自己的PHP半自动化代码审计工具
- 汉源高科24个千兆光口光纤汇聚交换机机架式工业级以太网交换机环网管理型交换机
- U盘启动盘维护工具 晨枫MaxDOS+WinPE+GHOST常用版本
- 网络流最大流初步-Push–relabel maximum flow algorithm
- 35 个非常实用的 Shell 拿来就用脚本实例!
热门文章
- Java语法理论和面经杂疑篇《五.集合框架》
- 1 Linux 学习日记
- mysql长度3 3_我的MYSQL学习心得(3) : 查看字段长度
- 一个对战程序的C++源代码
- android小程序日历,微信小程序:日历功能实现
- [HY000][1366] Incorrect string value: '\xE3\x81\x94\xE6\xB3\xA8...' for column 'content' at row 1
- 能量球效果(贝塞尔曲线)
- Claude回答ARINC653标准在中国大陆的应用情况
- AI测试自动化脚本:解析结果txt文件字段并保存至excel文件
- 惠普(HP)打印机驱动安装+答题卡尺寸设置: LaserJet MFP M436n(史上最详细操作演示)