服务端的登陆验证方式
刚入门的萌新肯定都有一个疑问,登录方式难道只能用Session么,那么如果不是Web项目该怎么办呢。
这篇文章将带你了解:JWT的token验证,通过Redis代替Session验证,还有最基本的Session验证。
正文
了解Session的登录验证方式(只能用于Web)
Session是什么
- 用来维护服务器和浏览器用户之间的状态联系
- Session的主要目的就是为了弥补Http的无状态特性
Session是如何验证用户状态的
在Java Web项目中用户登录成功会生成一个Session,这个Session会存储在服务端然后返回给浏览器,浏览器也会将Session存储起来。
在用户第二次请求的时候,浏览器会携带Session发送给服务端请求,这时候拦截器会验证Session是否存在,存在则是登录状态,不存在则是未登录。
- 如果看不懂的话看下图
了解Redis的登录验证方式(通用)
Redis是什么
- Redis是一个基于内存的是数据库
- Redis可以设置数据的过期时间
- 字典型数据库
如何使用Redis来验证用户的登录状态
- 这里我们使用Redis和Session的本质上是一样的,但是我们需要做的工作会更多。。
- 我们需要做什么
- 需要自己生成每个用户唯一的密匙(如UUID)
- 需要将密匙存储与Redis中
- 需要自行将密匙放在cookie或直接返回给前端
- 浏览器接收到密匙,将密匙存储到Cookie或者其他的存储方式
- 浏览器每个请求都需要带上密匙
- 服务端接收到请求,需自行验证请求中的密匙与服务端存储的密匙
这里的流程和Session基本一致,只不过我们需要做更多的工作了,就不放图了。
JWT的Token验证方式(本文要点)(通用)
这是我个人比较喜欢的一种方式
什么是JWT
-
JSON Web Token == JWT(它主要包含了以下信息)
- 发行人
- 到期时间
- 数据(如用户信息)
-
JWT最终会将所以数据哈希化成为一串密文(即为Token)
-
因为其自带到期时间,所以服务端一般无需保存Toekn
-
但是服务端也无法管理用户的登录状态
-
颁发以后一直有效,除非时间过期
如何使用JWT来验证用户登录状态
- 用户登录时使用用户的信息用JWT工具类生成 Token
- 注意要设置过期时间
- 将Token返回给前端浏览器
- 浏览器接收到Token,将密匙存储到Cookie或者其它的存储方式
- 浏览器每个请求都需要带上Token
- 服务端接收到请求,使用JWT工具类验证 token是否是自己颁发的、或过期没有等等
这里的流程和Session基本一致,就不放图了。
总结
基本的验证流程是一样的,只不过我们所做的工作不一样了。
这里提一下适用范围:
- Session只适用于web
- Redis验证适用于APP、Web、桌面应用等等
- JWT同上,当然token也可以用作信息交换
网友评论