在设计类似电商的系统时,一个常见的需求是每个页面都需要携带登录用户信息。常见的解决方法有两种:使用cookie保存、使用JWT保存。但如果系统中使用了Redis缓存,那么还可以有第三种解决方案–将用户token缓存在Redis中。
一、登陆时生成一个token存入Redis
//生成一个token对象,保存在redis中
redisTemplate.opsForHash().put("token","user",user);
二、在每个页面生成时,提供token
//以JSON字符串形式返回token
@RequestMapping(value = "/getToken",method = RequestMethod.GET)
@ResponseBody
public User getToken(){
User user = (User) redisTemplate.opsForHash().get("token", "user");
return user;
}
//发送ajax请求,获取token
function get_token(){
$.ajax({
url:"getToken",
type:"GET",
dataType:"JSON",
success:function(result){
//将返回的用户信息保存在token中
var token = result;
//打印登录用户
console.log(token);
//打印登录用户的id
console.log(token.id);
document.getElementById('username').innerText = "用户名:"+token.username;
}
});
}
三、注销时,删除token
//注销
@RequestMapping("/logout")
public String logout(){
redisTemplate.opsForHash().delete("token","user");
return "/login";
}