全部代码:
链接: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访问

版权声明:本文为weixin_58696998原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。