用户登录功能之token的使用
真正的大师永远怀着一颗学徒的心
哈喽!大家好,我是小奇,一位程序员界的学徒
小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。
一、登录
1、登录时生成token
我们登录成功后生成一个token也就是随机数,然后将随机数作为key,将登录查询到的用户信息作为value放入redis中,然后设置过期时间,最后将token返回给前端,前端将token存储,用来下一次请求后端的时候使用。
关键代码
//密码正确
//生成token
String token = UUID.randomUUID().toString();
//将用户密码清除再放入redis中
user.setPassword(null);
//向redis中存入token和用户信息
jedisClient.set(REDIS_USER_TOKEN + ":" + token, JsonUtils.objectToJson(user));
//设置过期时间
jedisClient.expir(REDIS_USER_TOKEN + ":" + token, SSO_SESSION_EXPIRE);
//返回token
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
public TaotaoResult userLogin(String username, String password) {
TbUserExample example = new TbUserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo(username);
List<TbUser> list = userMapper.selectByExample(example);
//没有此用户名
if(list == null || list.size() == 0){
return TaotaoResult.build(400, "用户名或密码错误");
}
TbUser user = list.get(0);
//密码错误
if(!DigestUtils.md5DigestAsHex(password.getBytes()).equals(user.getPassword())){
return TaotaoResult.build(400, "用户名或密码错误");
}
//密码正确
//生成token
String token = UUID.randomUUID().toString();
//将用户密码清除再放入redis中
user.setPassword(null);
//向redis中存入token和用户信息
jedisClient.set(REDIS_USER_TOKEN + ":" + token, JsonUtils.objectToJson(user));
//设置过期时间
jedisClient.expir(REDIS_USER_TOKEN + ":" + token, SSO_SESSION_EXPIRE);
//返回token
return TaotaoResult.ok(token);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
二、根据token查询用户信息
1、查询用户信息
根据token查询用户信息,如果查询不到证明token已经过期需要重新登录,如果token查询得到就返回用户信息,并且将token的有效时间重新更新为30分钟
@Override
public TaotaoResult getUserByToken(String token) {
//根据token从redis中查询用户信息
String json = jedisClient.get(REDIS_USER_TOKEN + ":" + token);
if(StringUtils.isBlank(json)){
return TaotaoResult.build(400, "此session已经过期,请重新登录");
}
//更新过期时间
jedisClient.expir(REDIS_USER_TOKEN + ":" + token, SSO_SESSION_EXPIRE);
//返回用户信息
return TaotaoResult.ok(JsonUtils.jsonToPojo(json, TbUser.class));
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
三、总结
这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
如果觉得我的文章还不错的话就点个赞吧,另外可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。
文章来源: xiaoqijava.blog.csdn.net,作者:学无止境小奇,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaoqijava.blog.csdn.net/article/details/125323046
- 点赞
- 收藏
- 关注作者
评论(0)