文章目录
- 登录认证
- 登录校验-概述
- 登录校验
- 会话技术
- 什么是会话呢?
- cookie
- Session
- 令牌技术
- 登录认证-登录校验-JWT令牌-介绍
- JWT
- 登录校验过滤器流程
SpringBoot案例通关版,上接这篇
登录认证
先讲解基本的登录功能
登录功能本质就是查询操作
那么查询完毕后返回一个Emp对象
如果Emp对象不为空,那么就说明查询出来数据,然后
就直接登录成功
登录校验-概述
登录校验
使用会话技术
会话技术
一次会话可以保存多次请求与响应
http请求是无状态的,每一次请求都不知道上一次的请求响应
客户端就是浏览器,cookie是存储在客户端的
session是存储在服务端的
令牌技术
什么是会话呢?
会话是浏览器于服务器建立连接,然后就建立了一次会话,
会话建立第一次浏览器于服务器发起请求,那么会话就建立了
浏览器第一次访问服务器会话就建立了
一次会话保存多次请求与响应
任一关闭那么会话就关闭了
会话跟踪的三种方案
cookie
session
令牌
cookie
首先优点是 http协议中支持的技术
但是在app中不能使用
而且cookie是可以被禁用的
cookie是不能跨域的
Session
session底层是基于cookie的
服务器给浏览器响应的时候会自动在请求头里面加一个数据
sey-cookie
jessionid=1
根据JessionId找到session
公司里面的服务器都是集群,项目是部署在多个服务器里面
所以请求发送的时候都是先到达负载均衡的服务器
然后才到达部署项目服务器里面
然后根据jessionID拿到session
cookie和session都是传统的会话解决方案
cookie里面存储的是sessionid
id的名字是固定的jessionid
每次请求都会把jessionid带到服务器
然后再根据jessionid带到服务端
找到session是服务器自动做的事情
优势 存储在服务器anq
但是在集群的环境下不能直接使用session
放请求头里面带着
cookie里面东西会放置在请求头
令牌技术
令牌就是字符串
令牌 支持pc端 支持移动端
解决集群环境下的认证问题
减轻客户端存储压力
令牌是存储在客户端浏览器当中的
后端生成令牌
并进行检验令牌
在服务端要校验令牌是否有效性
登录认证-登录校验-JWT令牌-介绍
JWT
jwt是base64编码
这是进行的编码操作
既然可以编码那么就可以去解码
第三部分签名
登录成功后生成令牌
然后每次请求去校验令牌
首先要引入依赖
然后直接调用工具类jwts
进行jwt
首先jwt的生成使用
jwts.builder
.setClaims
设置载荷数据
里面防止map数据
String jwt = Jwts.builder()
.setClaims(dataMap)
.signWith(SignatureAlgorithm.HS256, "ceshi1")
.setExpiration(new Date(System.currentTimeMillis() + 60 * 60 * 1000))
.compact();
首先根据Jwts.builder()先设置calims
然后设置签名,要加密的格式与秘钥
最后设计过期时间
也就是jwt的三要素都是封装进去
解析是
使用Jwts.parse
Claims claims = Jwts.parser()
.setSigningKey("ceshi")
.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MTAwLCJleHAiOjE3MTc0MzI4MTQsInVzZXJuYW1lIjoi6LW15pWPIn0.lHlZW6uU9HhSRqB9jMOqmN85MFCTuQH5yDt6091ZKfI")
.getBody();
这里只需要传入秘钥就可以使用
然后再传入jwt的字符串
也就是token那么就可以直接解析成功
没有放token的时候
访问这个请求,这个token就是为null空的
那么我们开始下发令牌
存储在请求中
每次请求都会携带
后端响应令牌后前端会自动接收
先校验令牌是否合法
登录校验过滤器流程
首先根据请求获取uri地址
判断是否是登录流程
如果是登录流程那么就直接指向业务代码去登录
如果不是那么就校验token
先判断是否有token
根据是否有token如果没有token那么就只会返回为登录结果
有token那么就进行判断token的合法
怎么把对象转为json格式的字符串
可以使用工具类
fastjson
解析的时候出现异常说明解析失败