利用redis来实现身份验证的一种方法,类似session机制
来源:互联网 发布:微信商城源码使用 编辑:程序博客网 时间:2024/06/09 19:47
HTTP协议是一种没有状态的协议,也就是说它不记录请求消息是谁发送的。这里我们把发送请求的称为客户端,接收请求并根据请求返回数据的称为服务端。
HTTP协议传输就导致了一个问题:一个服务端,只要有请求URL,谁都可以访问服务端应用。显然这不符合大多数服务端的安全性要求。所以应当做到的是:
客户端在通过用户名和密码进行了身份验证之后,下回这个客户端再发送请求的时候,服务器要能识别出来发送这个请求的客户端是谁,也就是再验证一次。
如何做到?一般是采用session机制:
1.用户请求登录,用户名和密码没有问题,登录成功之后,服务端生成一条记录,这个记录可以说明登录的用户是谁。
2.服务端把这条记录的ID发送给客户端,客户端收到这个ID之后,存在cookie里。
3.客户端每次发送请求,都会带着这个cookie。
4.服务端会验证一下这个cookie里的信息,如果能在服务端找到cookie里对应的信息,则身份验证通过,能够把数据返回给客户端。
以上就是我们常说的session机制的原理。下面来讲讲如何用redis实现上述类似想法的身份验证。
1.在服务端安装redis,redis是一种存储在内存中的数据库,以键值对的方式存储数据的。(如何安装redis,再与服务器项目连接,可以另去redis官网学一下。)
2.在登录验证的代码中我们要写的核心代码和解释如下:
private Jedis jedis = JedisUtil.getInstance().getJedis("127.0.0.1", 6379);//定义jedis对象,用来操作redisMap<String, String> resultMap = new HashMap<>();//定义一个HashMap,放入传回给客户端的数据和一个tokenMap<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只是其中一个)中,返回给客户端。3.客户端接收到登录之后需要的数据和token之后,每次再请求时,发送请求参数和token,服务端就可以根据token进行身份验证了。
jedis.exists(token);//服务端判断redis中,是否存在token。
0 0
- 利用redis来实现身份验证的一种方法,类似session机制
- 利用http组件来实现页面打印的一种方法
- 利用CDialogBar来实现类似工具栏的浮动条
- 利用CDialogBar来实现类似工具栏的浮动条
- 用redis来实现Session保存的一个简单Demo
- Redis实现类似同步方法调用的功能(一)
- Redis实现类似同步方法调用的功能(二)
- 利用.net的内部机制在asp.net中实现身份验证
- 利用.net的内部机制在asp.net中实现身份验证
- 用redis来实现具有ack机制的消息队列
- Ext_一种类似静态方法的写法^-^
- 一种类似页脚的展示方法
- 一种非AirPlay的方法来实现IOS录屏
- java发送url的一种方法,使用 HttpClient来实现
- 利用redis实现tomcat session共享
- 利用tomcat redis 实现session共享
- 利用redis同步登陆实现session共享
- 利用redis实现tomcat session共享
- No mapping found for HTTP request with URI
- git开个分支提交到远程
- Unity3D逐像素漫反射着色器代码
- iOS 开发商品详情页中的banner中点击查看图片
- 算法-第四版-练习1.3.2解答
- 利用redis来实现身份验证的一种方法,类似session机制
- ORA-02266: 表中的唯一/主键被启用的外键引用
- Node.js 创建第一个应用
- Elastic-Job作业分片策略
- viewpager 3D旋转 几行代码轻松搞定
- [数据结构]第二章-表
- 编程之美2.18 数组分割
- Maximum Likelihood,ML
- NPM 使用介绍