登录功能实现(会话,令牌,Filter,Interceptor)
1. 基础登录功能
问题
在未登录情况下,我们也可以直接访问部门管理、员工管理等功能。
2. 登录校验
2.1 会话技术
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。
会话跟踪方案:
客户端会话跟踪技术:Cookie
服务端会话跟踪技术:Session
令牌技术
2.1.1 Cookie
优点:HTTP协议中支持的技术
缺点:
移动端APP无法使用Cookie
不安全,用户可以自己禁用Cookie
Cookie不能跨域
2.1.2 Session
优点:存储在服务端,安全
缺点:
服务器集群环境下无法直接使用Session
Cookie的缺点
令牌技术
优点:
支持PC端、移动端
解决集群环境下的认证问题
减轻服务器端存储压力
缺点:需要自己实现
2.2 JWT令牌
2.2.1 JWT
简介
全称:JSON Web Token
定义了一种简洁的、自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的。
组成:
第一部分:Header(头),记录令牌类型,签名算法等。例如{"alg":'HS256","type":"JWT"}
第二部分:PayLoad(有效载荷),携带一些自定义信息、默认信息等。例如{"id":"1":"username":"Tom"}
第三部分:Signature(签名),防止Token被篡改、确保安全性。将header\payload,并加入指定密钥,通过指定签名算法而来。
Base64:是一种基于64个可打印的字符(A - Z a - z 0 - 9 + /) 来表示二进制数据的编码方式。
场景
1. 登录成功后,生成令牌
2. 后续每个请求,都要携带JWT令牌,系统在每次请求处理之前,先校验令牌,通过后,再处理
注意事项
JWT校验时使用的签名密钥,必须和生成JWT令牌时使用的密钥是配套的。
如果JWT令牌解析校验时报错,则说明JWT令牌被篡改了或 失效了,令牌非法。
2.3 过滤器Filter
2.3.1 概念
Filter 过滤器,是javaWeb三大组件(Servlet、Filter、Listener)之一。
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。
2.3.2 Filter快速入门
1. 定义Filter: 定义一个类,实现Filter接口,并重写其所有的方法。
2. 配置Filter: Filter类上加 @WebFilter 注解,配置拦截资源的路径。引导类上加 @ServletComponentScan 开启Servlet组件支持。
2.3.3 详解
执行流程
疑问
放行后访问对应资源,资源访问完成后,还会回到Filter中吗? 会
如果回到Filter中,是重新执行还是执行放行后的逻辑呢? 执行放行后的逻辑
拦截路径
Filter 可以根据需求,配置不同的拦截资源路径:
拦截路径 | urlPatterns值 | 含义 |
---|---|---|
拦截具体路径 | /login | 只有访问/login路径时,才会被拦截 |
目录拦截 | /emps/* | 访问/emps下的所有资源,都会被拦截 |
拦截所有 | /* | 访问所有资源,都会被拦截 |
过滤器链
1. 执行流程
请求 -> 放行前逻辑 ->放行 ->资源 ->放行后逻辑
2. 拦截路径
/login
/depts/*
/*
3. 过滤器链
一个web应用中,配置了多个过滤器,就形成了一个过滤器链
2.4 拦截器Interceptor
2.4.1 概述
概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring 框架中提供的,用来动态拦截控制器方法的执行。
作用:拦截请求,在指定的方法调用前后,根据业务需要执行预先设计的代码。
2.4.2 快速入门
1. 定义拦截器,实现HandlerInterceptor接口,并重写其所有方法。
2. 注册拦截器
2.4.3 详解
拦截路径
拦截器可以根据需求,配置不同的拦截路径:
拦截路径 | 含义 | 举例 |
/* | 一级路径 | 能匹配/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 |
拦截流程
Filter 与 Interceptor
接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口。
拦截范围不同:过滤器Filter会拦截所有的资源,而Interceptor只会拦截Spring 环境中的资源。
原文地址:https://blog.csdn.net/2301_79070677/article/details/142436360
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!