后端Web之登录校验(下篇)

news2025/4/5 1:12:56

目录

1.概述

​2.过滤器Fliter

3.拦截器Interceptor


1.概述

Filter过滤器:在Web开发中,过滤器(Filter)是一种非常重要的组件,用于在请求到达目标资源(如Servlet或静态资源)之前或之后,对请求或响应进行预处理或后处理。

它是JavaWeb三大组件(Servlet、Filter. Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。

Interceptor拦截器:Web开发中扮演着重要的角色,主要用于在请求到达Controller之前或之后执行一些操作。

 它是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的用来动态拦截控制器方法的执行。其作用是拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。

2.过滤器Fliter

它的使用非常简单:1.定义Filter:定义一个类,实现Filter接口,并重写其三个方法。2.配置Filter: Filter类 上加@WebFilter注解,配置拦截资源的路径。引导类上加@ServletComponentScan开启Servlet组件支持。

执行流程:放行后访问对应资源,资源访问完成后,还会回到Filter中,接着执行放行后的逻辑

Filter可以根据需求,配置不同的拦截资源路径:

过滤器链:一个web应用中,可以配置多个过滤器,这多个过滤器就形成了-一个过滤器链。执行顺序:注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序。例如A开头的过滤器就比B开头的过滤器先执行。

登录校验过滤器:

思路:所有的请求拦截后,除了登录请求之外都需要校验令牌。有令牌, 且令牌校验通过(合法) 才可以放行执行业务操作,否则都返回未登录错误结果

//1.获取请求url
String url=reg.getRequestURL().toString();
log.info("请求的url:{}",url);

//2.判断请求url中是否包含login,包含就是登录操作,放行
if (url.contains("login")){
    log.info("登录操作,放行");
    chain.doFilter(request,response);
    return;
}

//3.获取请求头中的令牌(token)
String jwt = req.getHeader("token");

//4.判断令牌是否存在、如果不存在、返回错误结果(未登录)
if(!StringUtils.hasLength(jwt)){
    1og.info("请求头token为空,返回未登录的信息");
    Result error=Result.error("NOT LOGIN");
    String notLogin =JSONObject.toJSONString(error)
    resp.getWriter().write(notLogin);
    return;
}


//5.解析token,如果解析失败,返回错误结果(未登录)
try {
    JwtUtils.parseJwT(jwt);    
} catch(Exception e){//jwt解析失败
    e.printstackTrace();
    log.info("解析令牌失败,返回错误信息");
    Result error=Result.error("NOT LOGIN");
    String notLogin =JSONObject.toJSONString(error)
    resp.getWriter().write(notLogin);
    return;
}

//6.放行
log.info("令牌合法,放行");
chain.doFilter(request,response);

3.拦截器Interceptor

使用:1.定义拦截器,实现HandlerInterceptor接口,并重写其所有方法。注释@Component把这个拦截器交给IOC容器管理。

2.注册拦截器,注入刚刚定义的拦截器,通配符**拦截所有请求

拦截器可以根据需求,配置不同的拦截路径:也可以指定不拦截的路径

过滤器和拦截器的总体执行流程:

过滤器和拦截器的区别

  • 接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口。
  • 拦截范围不同:过滤器Filter会拦截所有的资源,而Interceptor只拦截Spring环境中的资源。

登录校验拦截器的流程和过滤器完全一致, 按照接口规范CV一下稍作改造就可以了。

//删去过滤器当中的doFilter方法
//放行改为return true,不放行改为return false即可,其他步骤同理
if (url.contains("login")){
    log.info("登录操作,放行");
    return true;
}

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

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

相关文章

10、Redis高级:多级缓存、JVM进程缓存、OpenResty本地缓存、缓存同步Canal

多级缓存 0.学习目标 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 …

Earth‘s Future | 西南大学时伟宇团队揭示长江上游径流变化对气候变化与人类活动响应的驱动机制不同

本文首发于“生态学者”微信公众号! 径流是全球水循环的重要组成部分,对社会经济发展、维持农业生产和维护生态安全具有重要意义。自20世纪末,气候变化与人类活动双重加剧,长江上游径流变化对长江上游乃至长江流域具有重要影响。因…

SSRF以及CSRF

ssrf 服务端请求伪造:由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据 数据流:攻击者…

AI大模型日报#0823:GPT-4无师自通预测蛋白质结构登Nature子刊、豆包版《Her》升级上新

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)、“智谱AI”(glm-4-0520)生成了今日要点以及每条资讯的摘要。欢迎阅…

第一次运行Neo4J

在浏览器中输入127.0.0.1:7474(如Neo4J装在其它机器上输入相应的IP地址即可) 1、创建简单节点 这里我创建一个简单的“Employee”节点,在数据浏览器中的命令框(美元提示符下)键入以下命令 CREATE (emp:Employee) 执行…

leetcode139. 单词拆分,动态规划

leetcode139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s…

JDK、JRE、JVM关系

JDK:Java Development Kit,是java开发工具包 ,开发java必备工具,JDKJRE开发工具集(javac等) JRE:Java Runtime Environment,是java运行时的环境,包含了java虚拟机jvm java基础类库,是使用java…

【GD32】FreeRTOS实时操作系统移植(GD32F470ZGT6)

1. 简介 在日常的应用开发项目中,常常需要单片机具有处理多种任务的需求,如果使用裸机开发那么肯定是不现实的,因为受限于IO与处理器的巨大速度差异,在裸机下处理器常常要等待当前IO操作完成才能进行下一个任务,效率大…

亦菲喊你来学机器学习(11) --回归树算法

文章目录 回归树回归树结构回归树的工作原理优点与缺点构建回归树模型回归树模型参数介绍训练模型测试模型 总结 回归树 决策树是一种常用的机器学习算法,广泛应用于分类和回归任务中。当决策树用于回归任务时,我们称之为回归树(Regression …

零基础5分钟上手亚马逊云科技 - 网络安全分析最佳实践

简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

【逐行注释】基于CV/CT模型的IMM|MATLAB程序|源代码复制后即可运行,无需下载

订阅专栏后可以直接查看完整的源代码(和注释),无需付费下载或其他的操作。代码复制到MATLAB上面可以得到和我一样的运行结果。 文章目录 程序概述完整代码与逐行注释运行结果解释按模块分析代码程序概述 基于EKF的多模型交互。以CV和CT两个模型进行交互,这里对代码进行逐…

Django后台管理Xadmin使用DjangoUeditor富文本编辑器

Django后台管理Xadmin使用DjangoUeditor富文本编辑器 一、下载 点击github下载 https://github.com/twz915/DjangoUeditor3 1、下载完后解压到跟xadmin同一层级目录: 2、解压后名称可能为DjangoUeditor3-master,需要改为DjangoUeditor 3、进入DjangoUeditor目录,把Djan…

Visiual Studio如何添加C语言的依赖和一些快捷键

Debug 和 Release 项目输出设置 Debug: 调试版本,包含调试信息,并且把进行任何优化,便于程序员调试。Debug模式下生成两个文件,除了 .exe 或者 .dll文件外,还有一个 .pdb 文件,这个文件记录了代码中断点等…

查找数学类文献的专业数据库有哪些 如何获取这些数据库资源

一、MathSciNet(美国数学会《数学评论》) MathSciNet数据库是美国数学学会出版的《数学评论》Mathematical Reviews和Current Mathematical Publications的网络版,包含《数学评论》自1940年出版以来的所有评论文章,包括期刊、图书…

【Node】【4】事件循环和EventEmitter类

事件循环 事件驱动:node中程序的执行是由事件的发生和相应的事件处理器(eventHandler)来驱动的编程范式。 程序监听并响应发生的事件。每个异步事件都生成一个事件观察者,在执行某个事件(主题)结束的时候…

SVN项目的文件泄露分析和漏洞修复

说明:本文仅是用于学习分析自己搭建的SVN漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 …

信息学奥赛初赛天天练-75-NOIP2016普及组-完善程序-二分答案、二分查找、贪心算法、贪心策略

文章PDF链接: https://pan.baidu.com/s/1SVcGU_rApvoUWrUoviPCiA?pwdht2j 提取码: ht2j 复制这段内容后打开百度网盘手机App,操作更方便哦 1 完善程序 (单选题 ,每小题3分,共30分) 郊游活动 有 n名同学参加学校组织的郊游活动&#xff0c…

gateway的学习

1.网关的作用 1.负载均衡 2.过滤器的使用 1.通过配置文件实现的过滤器 2.代码逻辑层面实现全局过滤器 //全局过滤器代码逻辑实现 Component //Order(1):注解配置过滤器的执行顺序 public class GlobalFilter implements GatewayFilter, Ordered {/*** 处理当前请求,…

RocketMQ~高性能设计与实现(零拷贝技术)、多种集群模式

与Kafka类似,RocketMQ也使用了零拷贝技术、对于分区,其也有分队列的思维在。 零拷贝技术 传统的IO读写其实就是readwrite的操作,整个过程会分为如下几步 用户调用read()方法,开始读取数据,此时发生一次上下文从用户…

Storage:Keeping memories in the brain(存储:把记忆保存在大脑中)

Once you’ve encoded information, you now need to store it. Unfortunately, forgetting is a major part of how our brains work.Most of us can’t remember what we had for dinner Tuesday, three weeks ago.However, we can all remember our first kiss. 一旦完成了信…