必应搜索引擎网站建设168网站
目录
1.会话:
2.会话跟踪:
3.会话跟踪方案:
客户端会话跟踪技术:Cookie
服务端会话跟踪技术:Session
JWT令牌技术(https://jwt.io/)
定义:
优点:
缺点:
组成:
一.会话技术
1.会话:
用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
2.会话跟踪:
一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据
3.会话跟踪方案:
客户端会话跟踪技术:Cookie
优点:HTTP协议中支持的技术
缺点:移动端APP无法使用Cookie
不安全,用户可以自己禁用Cookie
Cookie不能跨域(跨域区分三个维度:协议,IP/域名,端口)
服务端会话跟踪技术:Session
优点:存储在服务端,安全
缺点:服务端集群环境下无法直接使用Session
Cookie的缺点
JWT令牌技术(https://jwt.io/)
定义:
定义了一种简洁的,自包含的格式,用于在通信双方以json数据格式安全的传输信息,由于数字签名的存在,这些信息是可靠的
优点:
支持PC端,移动端
解决集群环境下的认证问题
减轻服务器端存储压力
缺点:
自己实现
组成:
第一部分:Header(头),记录令牌类型,签名算法等。例如:{"alg":"HS256","type":"JWT"}
第二部分:Payload(有效载荷),携带一些自定义信息,默认信息。例如:{"id":"1","username":"Tom"}
第三部分:Signature(签名),防止Token被篡改,确保安全性。将header,payload,并加入指定密钥,通过指定签名算法计算而来。
场景:登录认证
1.登录后,生成令牌
2.后续每个请求都要携带JWT令牌,系统在每次请求处理之前,先校验令牌,通过后,在处理
生成令牌:
@Testvoid test1(){Map<String, Object> claims=new HashMap<>();claims.put("id",1);claims.put("username","Tom");String ito = Jwts.builder().setClaims(claims)//自定义内容(载荷).signWith(SignatureAlgorithm.HS256,"iejifalkdlajiwejakldsjfioefjslkdjklfjeiroekls")//签名算法.setExpiration(new Date(System.currentTimeMillis() + 12 * 3600 * 1000))//有效期.compact();System.out.println(ito);}}
注意!!!:签名算法使用Base64编码字符串长度至少为43位
解析令牌
二.过滤器
概念:
Filter过滤器,是javaweb三大组件(Servlet,Filter,Listener)之一。
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
过滤器一般完成一些通用的操作,比如:登录校验,统一编码处理,敏感字符处理。
快速入门:

过滤器链
介绍:一个web应用中,可以配置多个过滤器,这多个过滤器形成一个过滤链
顺序:注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序。
三.拦截器
概念:
是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行。
作用:
拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。
步骤:
1.定义拦截器,实现HandlerInterceptor接口,并重写其所有方法。
2.注册拦截器
拦截器可以根据需求,配置不同的拦截路径
拦截路径 | 含义 | 举例 |
---|---|---|
/** | 一级路径 | 能匹配/depts,/emps,login,不能匹配/depts/1 |
/** | 任意级路径 | 能匹配/depts,/depts/1,/depts/1/2 |
/depts/* | /depts下的一级路径 | 能匹配/depts/1,不能匹配/depts/1/2,/depts |
/depts/** | /depts下的任意路径 | 能匹配/depts,/depts/1,depts/1/2,不能匹配/emps/1 |
拦截器执行流程:
拦截器与过滤器的区别
1.接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterception接口
2.拦截范围不同:过滤器Filter会拦截所有的资源,而Interceptor只会拦截Spring环境中的资源
四.登录校验
步骤:
1.获取请求url
2.判断请求url中是否包含login,如果包含,说明是登录操作,放行
3.获取请求头中的令牌(token)
4.判断令牌是否存在,如果不存在,返回错误结果(未登录)
5.解析token,如果解析失败,返回错误结果(未登录)
6.放行