JavaWeb12

登陆拦截

会话技术

  • 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应

  • 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据

  • 会话跟踪方案:

    • 客户端会话跟踪技术:Cookie

    • 服务端会话跟踪技术:Session

    • 令牌技术

会话跟踪方案对比

JWT

  • 全称:JSON Web Token

  • 定义了一种简洁的、自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的

  • 组成:

    • 第一部分:Header(头),记录令牌类型、签名算法等

    • 第二部分:Payload(有效荷载),携带一些自定义信息,默认信息等

    • 第三部分:Signature(签名),放置Token被篡改、确保安全性。将header、payload,并加入指定密钥,通过指定签名算法计算而来

  • 场景:登陆认证

    • 登陆成功后,生成令牌

    • 后续每个请求,都要携带JWT令牌,系统在每次请求处理之前,先校验令牌,通过后,再处理

@Testpublic void testGenJwt() {Map<String, Object> claims = new HashMap< >();claims.put("id", 1);claims.put("name", "tom");
​String jwt=Jwts.builder().signWith(SignatureAlgorithm.HS256,"itheima")//签名算法.setClaims(claims)//自定义内容.setExpiration(new Date(System.currentTimeMillis()+3600*1000))//设置有效期为一小时.compact();System.out.println(jwt);
@Testpublic void testParseJwt() {Claims claims = Jwts.parser().setSigningKey("itheima")//指定签名密钥.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTczMjg3NTIzM30.kM8DuJd7FwHGKPhw_9Om418oOyiVj5fRxYn94wOhM_Q")//解析令牌.getBody();System.out.println(claims);}

注意事项:

  • JWT校验时使用的签名密钥,必须和生成JWT令牌时使用的密钥是配套的

  • 如果JWT令牌解析校验时报错,说明JWT令牌被篡改了或失效了,令牌非法

过滤器 (Filter)

  • 过滤器是JavaWeb三大组件(Servlet Filter Listener)之一

  • 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能

  • 过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等

Filter执行流程

package com.itheima.filter;
​
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
​
@WebFilter(urlPatterns = "/*")
public class DemoFilter implements Filter {
​@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("init");}
​@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("do");System.out.println("before");chain.doFilter(request, response);//放行System.out.println("after");}
​@Overridepublic void destroy() {System.out.println("destroy");}
}
​
  • 放行后访问对应资源,资源访问完成后,会回到Filter中

  • 回到Filter中重新执行放行后逻辑

Filter拦截路径

过滤器链

  • 一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链

  • 顺序:注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序

拦截器(Interceptor)

  • 是一种动态拦截方法调用的机制,类似于过滤器,Spring框架中提供的,用来动态拦截控制器方法的执行

  • 作用:拦截请求,再指定的方法调用前后,根据业务需要执行预先设定的代码

拦截器-拦截路径

拦截器-执行流程

Filter Interceptor

  • 接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口

  • 拦截范围不同:过滤器Filter会拦截所有的资源,而Interceptor只会拦截Spring环境中的资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483263.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用STM32CubeMX配置串口各种功能

使用STM32CubeMX配置串口各种功能 STM32CubeMX软件的安装接收空闲中断STM32CubeMX配置1.新建工程2. 选择芯片3. 选择时钟和下载方式4. 配置串口5.设置工程消息6.生成代码7.修改生成的代码 空闲中断DMA转运STM32CubeMX配置4.配置串口5.设置工程消息6.生成代码7.修改生成的代码 S…

Linux详解:文件权限

文章目录 前言Linux文件权限基础文件成员与三组权限字符 权限的修改修改文件所有者总结 前言 在浩瀚的操作系统世界中&#xff0c;Linux以其开源、灵活和强大的特性&#xff0c;成为了服务器、开发环境以及众多个人用户的首选。而在Linux的众多特性中&#xff0c;文件权限机制…

openEuler 22.03 使用cephadm安装部署ceph集群

目录 目的步骤规格步骤ceph部署前准备工作安装部署ceph集群ceph集群添加node与osdceph集群一些操作组件服务操作集群进程操作 目的 使用ceph官网的cephadm无法正常安装&#xff0c;会报错ERROR: Distro openeuler version 22.03 not supported 在openEuler上实现以cephadm安装部…

xiaolin coding 图解 MySQL笔记——事务篇

1. 事务隔离级别是怎么实现的&#xff1f; 数据库中的**事务&#xff08;Transaction&#xff09;**先开启&#xff0c;然后等所有数据库操作执行完成后&#xff0c;才提交事务&#xff0c;对于已经提交的事务来说&#xff0c;该事务对数据库所做的修改将永久生效&#xff0c;…

掌握 Spring Boot 中的缓存:技术和最佳实践

缓存是一种用于将经常访问的数据临时存储在更快的存储层&#xff08;通常在内存中&#xff09;中的技术&#xff0c;以便可以更快地满足未来对该数据的请求&#xff0c;从而提高应用程序的性能和效率。在 Spring Boot 中&#xff0c;缓存是一种简单而强大的方法&#xff0c;可以…

408——数据结构(持续更新)

文章目录 一、绪论1.1 相关概念1.2 数据结构三要素1.3 相关习题1.4 复杂度1.4.1 时间复杂度1.4.2 复杂度相关习题 二、线性表 一、绪论 1.1 相关概念 数据&#xff1a;数据是信息的载体&#xff0c;所有能被输入到计算机中&#xff0c;且能被计算机处理的符号的集合。如图片、…

深入浅出:开发者如何快速上手Web3生态系统

Web3作为互联网的未来发展方向&#xff0c;正在逐步改变传统互联网架构&#xff0c;推动去中心化技术的发展。对于开发者而言&#xff0c;Web3代表着一个充满机遇与挑战的新领域&#xff0c;学习和掌握Web3的基本技术和工具&#xff0c;将为未来的项目开发提供强大的支持。那么…

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…

Leetcode 每日一题 205.同构字符串

目录 问题描述 过题图片 示例 解决方案 代码实现 题目链接 总结 问题描述 给定两个字符串 s 和 t&#xff0c;判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t&#xff0c;那么这两个字符串是同构的。具体来说&#xff0c;每个出现的字符都应当映射…

C# 集合(Collection)

文章目录 前言一、动态数组&#xff08;ArrayList&#xff09;二、哈希表&#xff08;Hashtable&#xff09;三、排序列表&#xff08;SortedList&#xff09;四、堆栈&#xff08;Stack&#xff09;五、队列&#xff08;Queue&#xff09;六、点阵列&#xff08;BitArray&…

2.5 特征降维(机器学习)

2.5 特征降维 2.5.1 降维 降维&#xff1a;是指在某些限定条件下&#xff0c;降低随机变量&#xff08;特征&#xff09;个数&#xff0c;得到一组“不相关”主变量的过程。 ndarray 维数 嵌套的层数 0维 标量 1维 向量 2维 矩阵 3维 n维 二维数组 降低的维度…

【小白学机器学习41】如何从正态分布的总体中去抽样?比较不同的取样方差的差别

目录 1 目标&#xff1a;使用2种方法&#xff0c;去从正态分布的总体中去抽样&#xff0c;获得样本 1.1 step1: 首先&#xff0c;逻辑上需要先有符合正态分布的总体population 1.2 从总体中取得样本&#xff0c;模拟抽样的过程 2 从正态分布抽样的方法1 3 从正态分布抽样…

框架5:SpringBoot 2 - 核心功能

SpringBoot2 - 基础入门【一 ~ 五】&#xff0c;详见&#xff1a; 六、配置文件 6.1 properties文件格式 同之前的用法。 6.2 yaml文件格式【推荐】 YAML本意&#xff1a;“YAML”不是一种标记语言。但在开发中&#xff0c;实际把它理解为&#xff1a;“Yet Another Markup Lan…

行为型设计模式之《责任链模式》实践

定义 责任链模式&#xff08;Chain Of Responsibility Pattern&#xff09;顾名思义&#xff0c;就是为请求创建一条处理链路&#xff0c;链路上的每个处理器都判断是否可以处理请求&#xff0c;如果不能处理则往后走&#xff0c;依次从链头走到链尾&#xff0c;直到有处理器可…

Vue前端开发-路由树配置

一个配置路由的文件由导入路由模块、创建路由对象和导出路由对象三个部分组成&#xff0c;在创建路由对象时&#xff0c;需要构建路由数组&#xff0c;路由数组中包括一级、二级和多级路由结构&#xff0c;因此&#xff0c;这种结构的路由配置&#xff0c;又称为路由树配置。 …

2.mysql 中一条更新语句的执行流程是怎样的呢?

前面我们系统了解了一个查询语句的执行流程&#xff0c;并介绍了执行过程中涉及的处理模块。 相信你还记得&#xff0c;一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块&#xff0c;最后到达存储引擎。 那么&#xff0c;一条更新语句的执行流程又…

JavaScript根据数据生成柱形图

分析需求 // 定义一个数组来存储四个季度的数据 dataArray = []// 循环4次,获取用户输入的数据并存储到数组中 for i from 0 to 3// 获取用户输入的数据inputData = 获取用户输入的第(i + 1)季度的数据// 将数据存入数组dataArray[i] = inputData// 遍历数组,根据数据生成柱…

实验13 使用预训练resnet18实现CIFAR-10分类

1.数据预处理 首先利用函数transforms.Compose定义了一个预处理函数transform&#xff0c;里面定义了两种操作&#xff0c;一个是将图像转换为Tensor&#xff0c;一个是对图像进行标准化。然后利用函数torchvision.datasets.CIFAR10下载数据集&#xff0c;这个函数有四个常见的…

【AI系统】代数简化

代数简化 代数简化&#xff08;Algebraic Reduced&#xff09;是一种从数学上来指导我们优化计算图的方法。其目的是利用交换率、结合律等规律调整图中算子的执行顺序&#xff0c;或者删除不必要的算子&#xff0c;以提高图整体的计算效率。 代数化简可以通过子图替换的方式完…

多人聊天室项目 BIO模型实现

BIO模型聊天室项目大体设计 BIO编程模型 Acceptor是服务器端负责监听具体端口的Socket每有一个客户端Client连接到服务器端&#xff0c;Acceptor就创建一个新的线程Handler来处理客户端发送的消息每一个客户端都有一个唯一的Handler来对应处理其事务为保证线程安全&#xff0c…