第十一次Javaweb作业

4.登录校验

4.1会话

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

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

  • cookie客服端会话跟踪技术(addCookie(name,value),getCookie方法)

    优点:HTTP协议中支持的技术

    缺点:移动端APP无法使用Cookie,不安全用户可以自己禁用Cookie,Cookie不能跨域。(跨域区分三个维度:协议,IP/域名,端口)

  • Session服务端会话跟踪技术(addAttribute(name,value),setAttribute(name,value),getAttribute(name)方法)

    优点:存储在服务端,安全

    缺点:服务器集群环境下无法使用Session+Cookie缺点

  • 令牌技术

    优点:支持PC端,移动端。解决集群环境下的认证问题。减轻服务端存储压力。

    缺点:需要自己实现

4.2JWT令牌技术

--简洁、自包含的格式,用于在通信双方以JSON数据格式安全的传输信息。由于数字签名的存在,这些信息都是可靠的。

组成:

第一部分:Header(头),记录令牌类型、签名算法等。例如:[“alg”:“HS256”,“type”:"WT”)

第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。例如:“id”."1"“username”."Tom”

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

​ *第三部分字符的由来不是Base64编码方式生成的,而是前面指定的签名算法

应用场景-- 登录认证

① 用户登录成功后,服务端生成一个JWT令牌,并传输给前端。

②前端拿到JWT令牌之后会将其存储起来,之后前端的每一次请求都会将JWT令牌携带到服务端,服务端会对请求进行统一拦截,拦截之后先判断有没有把这个令牌带过来。

​ 如果没有令牌就拒绝访问;若有令牌但是无效仍然拒绝访问;若有效则直接放心,并处理对应请求

*JWT校验时使用的签名秘钥,必须和生成JWT令牌时使用的秘钥是配套的(编码和解析时秘钥必须相同)

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

登录成功下发令牌令牌生成: 登录成功后,生成JWT令牌,返回给前端令牌校验,在请求到达服务端后,对令牌进行统一拦截、校验用户登录成功后,系统会自动下发JWT令牌,然后在后续的每次请求中,都需要在请求头header中携带到服务端,请求头的名称为token,值为登录时下发的JWT令牌

4.3Filter

--Filter过滤器,是javaWeb三大组件(Servlet、Filter、Listener)之一

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

​ ① 想要访问服务器中的某些资源,必须先经过Filter过滤器。

​ ② 再此处进行一些操作,完成之后进行放行,访问对应的资源

​ ③ 资源访问完毕,最后再回到过滤器,然后再给浏览器响应对应的数据

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

​ 如果没有过滤器,我们需要在每一个接口中编写登录校验逻辑。

​ 如果登录了,放行去访问对应的信息,如果没有登录,直接在Filter中返回错误信息,不再访问后面的请求

  • 定义Filter:定义一个类,实现Filter接口,并重写其所有方法

但是开发中我们一般只实现doFilter这个方法,其他两个方式使用默认实现即可

  • 配置Filter:Filter类上添加@WebFilter注解,配置拦截资源路径。引导类上添加@ServletComponentScan注解开启Servlet组件支持

执行流程:当我们的过滤器拦截到请求之后我们需要完成一个非常重要的操作,那就是放行

放行“就是让其去访问对应的web资源,访问完过滤器之后还会回到过滤器当中,执行“放行”语句后面的代码,执行完毕之后再给浏览器响应数据 。

拦截路径:在快速入门中配置的是 /*,代表拦截所有请求

拦截路径urlPatterns含义
拦截具体路径/login只访问/login路径时才会被拦截
目录拦截/emps/*访问/emps下的所有资源,都会被拦截
拦截所有/*访问所有资源,都会被拦截

过滤器链:一个web应用中,可以配置多个过滤器,多个过滤器形成了一个过滤器链。​ 过滤器链中的过滤器会一个一个的执行,第一个放行之后会执行第二个,依次推,最后一个过滤器执行完后会访问对应请求。

​ 过滤器链中最后一个过滤器放行的话,会放行到web资源当中来访问web资源

​ 访问完资源后,是倒着进行的,先执行最后一个过滤器,再倒数第二个....

登录校验过滤器:

备注说明:

用户登录成功后,系统会自动下发JWT令牌,然后在后续的每次请求中,都需要在请求头header中携带到服务端,请求头的名称为token,值为登录时下发的JWT令牌。

如果检测到用户未登录,则会返回如下固定错误信息。

实现思路:

  • 获取请求url

  • 判断请求url中是否包含login,如果包含,说明是登录操作,放行

  • 获取请求头中的令牌(token)

  • 判断令牌是否存在,如果不存在,返回错误结果(未登录)

  • 解析token,如果解析失败,返回错误结果(未登录)

  • 放行

代码实现:在过滤器当中为什么要把ServletRequest类型强转成HttpServletRequest类型?

在Java中,ServletRequest是一个接口,它是由Servlet容器提供的。HttpServletRequest接口则是ServletRequest接口的子接口,它包含了一些用于HTTP协议的方法和属性。在Java Web应用程序中,Servlet容器实现了ServletRequest和HttpServletRequest接口,并使用HttpServletRequest实现了HTTP协议相关的逻辑。

在开发Web应用程序时,Servlet容器将在每个客户端请求到达时创建一个ServletRequest对象并将其传递给请求处理器。由于具体的实现是由Servlet容器提供的并且通常是HttpServletRequest,因此在编写Servlet处理器时,我们通常将ServletRequest对象强制转换成HttpServletRequest对象,以便能够调用提供的HTTP协议相关方法。

因此,在过滤器中,如果我们需要使用HttpServletRequest接口中特定的HTTP协议相关方法,我们需要将ServletRequest对象强制转换成HttpServletRequest对象。这样我们才能够在处理ServletRequest对象时,使用HttpServletRequest中更多的方法和属性。

4.4Interceptor - 拦截器

--是一种动态拦截方法调用调用机制,类似过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行(拦截请求的)

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

拦截路径:

addPathPatterns 指定拦截哪些路径

excludePathPatterns 执行不拦截哪些不经

/*:一级路径-能匹配/depts,/emps,/login,不能匹配/depts/1/**:任意级路径-能匹配/depts/1,/depts,/depts/1/2/depts/* :/depts下一级路径-能匹配/depts/1,不能匹配/depts,/depts/1/2,/depts/depts/**:/depts下的任意路径-能匹配/depts,/depts/1,/depts,/depts/1/2

执行流程:① 当浏览器向Web服务器发送请求时,我们所设定的过滤器会拦截到这一请求。

② 过滤器先执行放行前逻辑,在此处决定是否放行

③ 放行之后进入到Spring环境中,进入DispatcherServlet

​ 在请求响应时说道,tomcat服务器并不识别我们所编写的controller程序,但是他是识别Servlet程序的,因为tomcat是一个Servlet程序。

​ 而在SpringWeb当中提供了一个非常核心的Servlet,我们叫做DispatcherServlet前端核心控制器,所以请求会先进入到DispatcherServlet,请求由DispatcherServlet再传给Controller

​ 如果设置了拦截器的话,DispatcherServlet在传给Controller之前需要先被拦截器拦截住

④ 拦截器拦截到,先进行preHandle,决定是否放行,如果放行便访问Controller层方法

⑤Controller层方法完成之后,再执行postHandler方法已经afterCompletion方法

⑥返回给DispatcherServlet

⑦最终执行放行后逻辑

⑧最终给浏览器响应数据

过滤器与拦截器的区别:

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

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

登录校验拦截器实现思路:与过滤器思路一模一样

  • 获取请求url

  • 判断请求url中是否包含login,如果包含,说明是登录操作,放行

  • 获取请求头中的令牌(token)

  • 判断令牌是否存在,如果不存在,返回错误结果(未登录)

  • 解析token,如果解析失败,返回错误结果(未登录)

  • 放行

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

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

相关文章

Django(根据Models中模型类反向生成数据库表)—— python篇

一、数据库的配置 1、 django默认支持 sqlite,mysql, oracle,postgresql数据库。 sqlite:django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3 mysql:引擎名称&#xff…

解决Transformer根本缺陷,所有大模型都能获得巨大改进

即使最强大的 LLM 也难以通过 token 索引来关注句子等概念,现在有办法了。 最近两天,马斯克和 LeCun 的口水战妥妥成为大家的看点。这两位 AI 圈的名人你来我往,在推特(现为 X)上相互拆对方台。 LeCun 在宣传自家最新论…

leetcode 动态规划(基础版)单词拆分

题目: 题解: 一种可行的dp做法是基于完全背包问题,将s看成是一个背包,wordDict看作是物品,然后往s中放入物品判断最终是否可以变为给定的s即可。这道题和上一题都用到了在dp如何枚举连续子串和状态表示:枚…

【C++】C++拷贝构造引发的无限递归问题及其解决方法

了解C拷贝构造引发的无限递归问题及其解决方法 在C中,拷贝构造函数用于创建一个对象的副本。正确使用拷贝构造函数非常重要,否则可能会引发无限递归问题,导致程序崩溃。 什么是拷贝构造函数? 拷贝构造函数是一种特殊的构造函数…

Golang 百题(实战快速掌握语法)_2

返回集合中满足指定条件的最后一个元素 本实验将实现判断给定集合中的元素是否符合,并返回符合的最后一个元素。 知识点 forfmt.Error 适合人群 本课程属于基础课程。需要用户掌握 Go 语言编程基础知识、计算机基础知识和 Linux 环境的基本用法。 许可证 内容…

潮玩手办盲盒前端项目模版的技术探索与应用案例

一、引言 在数字化时代,随着消费者对个性化和艺术化产品的需求日益增长,潮玩手办和盲盒市场逐渐崭露头角。为了满足这一市场需求,前端技术团队需要构建一个功能丰富、用户友好的在线平台。本文旨在探讨潮玩手办盲盒前端项目模版的技术实现&a…

MySQL入门学习-MySQL日志.查询日志

MySQL 日志包括错误日志、通用查询日志、二进制日志、中继日志、慢查询日志等,以下是关于查询日志的介绍: 一、概念: 查询日志记录了客户端连接 MySQL 后执行的所有语句,包括执行失败的语句。 二、特点: - 记录详细…

Postman接口工具实战

为了更好地展示Postman接口测试的实战过程,我将以一个简单的实战示例来说明如何使用Postman完成一个API的测试。假设我们要测试一个假想的天气查询API,该API允许用户通过城市名查询天气情况。我们将执行以下步骤: 1. 准备工作 确保已经安装…

FuTalk设计周刊-Vol.025

🔥🔥AI漫谈 热点捕手🔥🔥 1、耗时半年,实地调研!泣血2万字,破除你的人工智能焦虑《2023最全AI商业落地调研报告》 链接https://www.bilibili.com/video/BV1YB4y1f7GE?share_sourcecopy_web &…

Vue3路由守卫的理解

官网:导航守卫 | Vue Router 目录 1.路由类型 1.1导航守卫 1.2路由独享 1.3组件内守卫 2.路由元信息 1.路由类型 1.1导航守卫 全局 :所有路由都会触发 router.beforeEach((to,from,next)>{}) router.afterEach((to,form,next)>{}) 1.2路由独享 路由表中的组件 be…

计算机公共课面试常见问题:线性代数篇

目录 1. 特征向量和特征值代表什么含义? 2. 矩阵的秩是什么?满秩代表什么?不满秩呢? 3. 奇异值分解是什么? …

2024上海初中生古诗文大会倒计时4个多月:真题示例和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间,我们继续来看10道选择题真题和详细解析,以下题目截取自我独家制作的在线真题集,都是来自于历届真题,去重、合并后,每道题都有参考答案和解析。 为帮助孩子自测和练习&…

广度优先遍历解决迷宫问题

学习贺利坚老师课程 数据结构例程——迷宫问题(用队列)_数据结构用队列求解迷宫问题-CSDN博客 本人详细解析博客 广度优先遍历解决迷宫问题_迷宫求解c语言深度广度遍历-CSDN博客 版本更新日志 V1.0: 模仿详细解析博客, 基础上, 命名优化, 规范书写, 加上…

改变AI历史的Transformer是如何帮助LLM大模型工作的?看图解密Transformer原理,看不懂算我输!

在过去的几年里,大型语言模型(LLM)的出现,为长达数十年的智能机器构建的探索中带来了巨大的飞跃。 这项基于试图模拟人类大脑的研究技术,也在近几年催生了一个新领域——Generative AI 生成式人工智能,简单理解就是可以 通过模仿…

llama-3 本地化部署实验

国产大模型的API 有限,编写langchain 应用问题很多。使用openai 总是遇到网络问题,尝试使用ollama在本地运行llama-3。结果异常简单。效果不错。llama-3 的推理能力感觉比openai 的GPT-3.5 好。 Ollama 下载 官网:https://ollama.com/downl…

基于GYM环境的DQN简单实现

1. Gym的安装 两种安装方式: https://zhuanlan.zhihu.com/p/483132488 注意:Gym版本太新了,有些APIs不兼容,可以考虑低版本的Gym pip install gym0.19.0 2. 基于CartPole-v0项目 参考: DQN代码逐行详解-CSDN博…

武汉凯迪正大—漆包圆线软化击穿试验仪 漆包线检测仪器

产品功能 武汉凯迪正大电气有限公司生产KDZD-JC软化击穿试验仪用于检测3.00mm及以下漆包线在热状态下漆膜软化后的绝缘性能,根据设定的预热温度、试验时间、仪器自动完成对试样的预加热、加负荷、加试验电压,达到试验时间或试样被击穿时即卸负荷&#x…

基于ARM的通用的Qt移植思路

文章目录 实验环境介绍一、确认Qt版本二、确认交叉编译工具链三、配置Qt3.1、修改qmake.conf3.2、创建autoConfig.sh配置文件 四、编译安装Qt五、移植Qt安装目录六、配置Qt creator6.1、配置qmake6.2、配置GCC编译器6.3、配置G编译器6.4、配置编译器套件6.5、创建应用 七、总结…

【Linux杂货铺】Linux学习之路:期末总结篇1

第一章 什么是Linux? Linux 是 UNIX 操作系统的一个克隆;它由林纳斯 本纳第克特 托瓦兹从零开始编写,并在网络上众多松散的黑客团队的帮助下得以发展和完善;它遵从可移植操作系统接口(POSIX)标准和单一 UNIX 规范…

PLC数据采集案例

--------天津三石峰科技案例分享 项目介绍 项目背景 本项目为天津某钢铁集团下数字化改造项目,主要解决天津大型钢厂加氢站数字化改造过程中遇到的数据采集需求。项目难点PLC已经在运行了,需要采集里面数据,不修改程序,不影响P…