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 统一认证 登陆系统的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot实现用户统一管理与单点登陆

Deepin系统基于LDAP统一认证

SpringBoot初始教程之Redis集中式Session管理

laravel5.5 调用系统自带登陆认证auth

今日分享一下自己总结的登陆认证模型

Oauth2.0认证模式