登录校验原理过程和统一拦截技术(Cookie、Sesstion 和JWT令牌)

news/2024/10/21 20:41:29/

一、登录校验

  • 问题:在未登录情况下,我们也可以直接访问部门管理、员工管理等功能。
  • 由于浏览器与web服务器中的数据交互是通过HTTP协议的,而HTTP协议是无状态的–即每个页面中的请求和响应都是独立的,没有状态存在。
  • 所以我们需要进行登录校验

1.登录校验

  • 每次访问页面的时候可以用if...else...来进行判断用户是否登录。但过程较为繁琐,所以我们设置统一拦截。

二、统一拦截

在这里插入图片描述

1.登录标记

(1).会话技术:

  • 用户登录成功之后,每一次请求中,都可以获取到该标记。
  1. 会话:
  • 用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束在一次会话中可以包含多次请求和响应。
  1. 会话跟踪:
  • 一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据

(2).会话跟踪方案:

  1. 客户端Cookie(传统)
  • 客户端会话跟踪技术:Cookie
import com.mannor.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Slf4j
@RestController
public class SessionController {//设置cookie@GetMapping("/c1")public Result cookie(HttpServletResponse response) {response.addCookie(new Cookie("login_username", "mannor"));//设置Cookie/响应Cookiereturn Result.success();}@GetMapping("/c2")public Result cookie2(HttpServletRequest request) {Cookie[] cookies = request.getCookies();//获取所有的Cookiefor (Cookie cookie : cookies) {if (cookie.getName().equals("login_username")) {//输出name为 login_username 的cookieSystem.out.println("login_username: " + cookie.getValue());}}return Result.success();}
}

优点:HTTP协议中支持
缺点:1.移动端APP无法使用cookie不安全,2.用户可以自己禁用,3.Cookiecookie不能跨域。

  1. 服务端Session(传统)
  • 服务端会话跟踪技术:Session,基于cookie开发
import com.mannor.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;@Slf4j
@RestController
public class SessionController {//往HttpSession中存储值@GetMapping("/s1")public Result session1(HttpSession session) {log.info("attpSession-s1: {}", session.hashCode());session.setAttribute("loginUser", "tom");//往session中存储数据return Result.success();}//从HttpSession中获取值@GetMapping("/s2")public Result session2(HttpServletRequest request) {HttpSession session = request.getSession();log.info("HttpSession-s2:{}", session.hashCode());Object loginUser = session.getAttribute("loginUser");//从session中获取数据log.info("loginUser: {}", loginUser);return Result.success(loginUser);}
}

优点:存储在服务器,安全性高
缺点:1.在服务器集群的情况下无法直接使用Session; 2.Cookie的缺点(基于Cookie开发)。

  1. JWT令牌技术 (主流技术)
//具体相关内容在下详细介绍

优点:1.支持PC端和移动端 2.解决了集群环境下的认证问题 3.减轻了服务器端存储的压力(不用存储)。
缺点:需要自己实现。


http://www.ppmy.cn/news/534172.html

相关文章

厨房用具,将吸目无背无侧旁

问了医生说没事就开了2盒贴的药口服的都没首一、年份 2013年二、车型爱丽舍也许适用于其它车型请考证三、项目侧方位停车四、入库车身向前行驶距离路边50公分到前停车线停车目而视辗转反侧旁敲侧击珠玉在侧道路侧目无背无侧旁推侧引转辗反侧侧足而立横峰侧岭明扬侧…

制定CRM战略流程是哪些?

CRM战略是企业为了提升核心竞争力,在市场、销售、客户管理等方面开展的一系列改善、创新或转型的措施。目的是建立和维护与客户的关系,增加企业的收入。那么,企业如何制定CRM战略呢? 1、深入了解客户需求 企业需要了解其目标客户…

MySQL ----主从复制、分离解析

文章目录 一、MySQL 主从复制1.1服务性能扩展方式1.2 MySQL的扩展什么是读写分离? 1.3为什么要读写分离呢?1.4什么时候要读写分离?1.5主从复制与读写分离1.6mysql支持的复制类型1.7主从复制的工作过程1.8MySQL 读写分离原理1.9目前较为常见的…

【计算机网络详解】——网络层(学习笔记)

📖 前言:网络层它承担着网络间的数据传输和路由选择等核心任务,通过在传输层协议的基础上添加了路由和转发等功能,使得数据能够在全球范围内的互联网中自由流动。在这篇博客中,我们将深入探讨网络层的工作原理和具体实…

1.GPIO的工作原理

1.stm32引脚说明: 对于stm32f103zet6: 一共有7组io口;每组io口有16个io;一共有16*7112个io;分组情况为:GPIOA,GPIOB~GPIOG; 2.GPIO的基本结构: 3.GPIO的工作模式&…

XP访问WIN10共享打印机提示错误:操作无法完成,拒绝访问

XP系统添加打印机--连接到此计算机的本地打印机(取消自动检测)--创建新端口(LOCAL port)----输入端口名\\计算机名\打印机名。(例如:\\adubei\\HP lasjet 1020) 转载于:https://www.cnblogs.com…

win10共享打印机xp系统无法连接,拒绝访问解决办法

1.控制面板/添加删除程序/启动或关闭windows功能 #勾选SMB相关项 #xp系统就可用访问到。如提示拒绝访问,继续下面步骤。 2.添加打印机/添加网络打印机/找到共享的打印机,把地址复制出来。 3.修改一个已经安装的打印机,添加端口,端…

win7无法连接打印机拒绝访问_打印机拒绝访问,教您打印机拒绝访问无法连接

小伙伴你们在打印文档时有没有遇到过打印机处于"拒绝访问,无法连接"的状态呢?其实在共享打印机的候我们经常都会遇到无法连接共享打印机的情况错去提示为:“操作无法完成,拒绝访问”下面,遇到这个问题时该怎…