session + redis 统一认证 登陆系统
Posted mesakii
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了session + redis 统一认证 登陆系统相关的知识,希望对你有一定的参考价值。
实现原理:
session机制的原理:
1.用户请求登录,用户名和密码没有问题,登录成功之后,服务端生成一条记录,这个记录可以说明登录的用户是谁。
2.服务端把这条记录的ID发送给客户端,客户端收到这个ID之后,存在cookie里。
3.客户端每次发送请求,都会带着这个cookie。
4.服务端会验证一下这个cookie里的信息,如果能在服务端找到cookie里对应的信息,则身份验证通过,能够把数据返回给客户端。
如何用redis实现上述目的:
在服务端安装redis,redis是一种存储在内存中的数据库,以键值对的方式存储数据的。
参看他人的案例:
private Jedis jedis = JedisUtil.getInstance().getJedis("127.0.0.1", 6379);//定义jedis对象,用来操作redis Map<String, String> resultMap = new HashMap<>();//定义一个HashMap,放入传回给客户端的数据和一个token Map<String, String> jedisMap = new HashMap<>();//定义一个HashMap,放入我们想存储的数据 jedisMap.put("accountId", loginAccount.getId().toString()); jedisMap.put("accountName", loginAccount.getName().toString());//把账户ID、name等我们需要的信息存储在map中 String token = Base58Helper.compressedUUID();//定义一个token字符串,Base58Helper.compressedUUID是自定义的生成的是唯一的字符串的方法 jedis.hmset(token, jedisMap);//向redis中存入键值对,键名:token;值:jedisMap。即把我们想要的数据以map形式存入redis,标记为token。 jedis.expire(token, 6000);//定义token的失效时间 resultMap.put("token", token);//把token放入到resultMap(resultMap可能还有其他客户端想要的数据,token只是其中一个)中,返回给客户端。
jedis.exists(token);//服务端判断redis中,是否存在token。
客户端接收到登录之后需要的数据和token之后,每次再请求时,发送请求参数和token,服务端就可以根据token进行身份验证了。
以上是关于session + redis 统一认证 登陆系统的主要内容,如果未能解决你的问题,请参考以下文章