如果用户名正确则成功进入
登录功能
代码
Controller
Service
Mapper
结果
若登录成功结果如下:
如果登录失败,结果如下
登录校验
为什么需要登录校验
有时再未登录情况下, 我们也可以直接访问部门管理, 员工管理等功能
因此我们需要一个登录校验操作, 只有确认用户登录的过程中才可以访问上述功能
若发现没有登录, 则不允许访问上述功能, 直接给前端响应一个错误的结果, 最终跳转到登录页面
浏览器与服务交互使用的协议http是一个无状态协议, 即下一次请求不会携带上一次请求的数据
如图, 先后访问login, emps操作的两次请求是独立的, 所以正常来讲无法判断员工是否登录
所以我们可以在员工登录成功之后存储一个登录标记
这样我们就可以在每个接口前面做一个条件判断, 若有这个标记就正常执行
没有登录就返回错误信息即可
为了简化在所以接口前面都做判断, 可以提供一个统一拦截,来拦截浏览器发送过来的所有请求,进而通过请求校验员工是否登录
校验方式就是获取之前存储的登录标记, 如果存在这个标记说明已经登录了,直接放行(红色粗箭头)
没获取到就返回给前端错误信息, 跳转登录界面
会话技术
1.
多次体现在登录一次建立连接后可以访问不同接口
当三个浏览与服务器同时建立会话, 则存在三个会话
2.
而因为Http协议的每次请求都是独立的, 所以同一会话中的多次请求是无法进行数据共享的, 想解决这个问题就要使用会话跟踪技术的
3.
4. 会话跟踪方案对比
浏览器首次请求, 服务器会自动在响应中加入一个cookie, 浏览器自动存储这个cookie, 下次发送请求还会自动带上这个cookie, 统一拦截时若请求中带有cookie说明已经登录过了
跨域:
浏览器首次请求后, 服务器查看请求内部是否有session,
如果有则会检查session是否有效,
如果没有则会建立一个session
注意: 某马这里讲得不对, session的底层不是基于cookie的, 两者没有相关
Session存储在服务端, SessionId 存储在浏览器这边, 所以并不会暴露
JWT令牌
不是必须存储在cookie中, 也就是不必须存储在PC端, 也可以存储在移动端
令牌存储在客户端不怕伪造, 因为在统一拦截时会检测会检测令牌是否有效
组成
第一 二 部分是由Base64生成 第三部分是由结合(密钥,一,二部分) 由签名算法生成来
使用场景:
JWT-生成
1, 首先引入依赖
2. 使用Jwts 工具类,
3. 生成如下
解析JWT
拦截技术
过滤器Filter
Filter快速入门
1. 定义Filter: 定义一个类, 实现Filter接口, 并重写其所有方法
2. 配置Filter: Filter类上加 @WebFilter 注解(标识当前是一个过滤器组件), 配置拦截资源的路径(图中表示所有路径). 并在引导类上加入@ServletComponentScan 开启 Servlet组件支持
Filter执行流程
过滤器链
登录校验Filter- 流程
拦截器Interceptor
拦截器快速入门:
1. 定义拦截器, 实现HandlerInterceptor接口, 并重写其所有方法
2. 注册拦截器
@Configuration 表示这是个配置类
@Autowired 注入LoginCheckInterceptor 对象
拦截器详解
拦截器可以根据需求, 配置不同的拦截路径
拦截器-执行流程
Tomcat不识别controller程序, 因为他是一个Servlet容器
所以Spring 提供了 DispatcherServlet 前端控制器,
用来把请求转给Controller
过滤器和拦截器区别