全部代码:
链接: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; @Autowired private getVerificationCode getVerificationCode; @Autowired private 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("对不起,您的账号已经停用,请联系管理员"); } //生成token String token = JwtUtil.getToken(); //保存redis(token,对象) redisUtil.set(token, people.getId(), Constant.LOGIN_USER_DETE); //返回token ajax.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访问
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119877.html