当前位置: 首页 > news >正文

过滤器Filter,拦截器Interceptor

  1. 过滤器Filter
    1. 快速入门

       

    2. 详情
    3. 登录校验-Filter
      1. package com.itheima.filter;import com.alibaba.fastjson.JSONObject;
        import com.itheima.pojo.Result;
        import com.itheima.utils.JwtUtils;
        import lombok.extern.slf4j.Slf4j;
        import org.springframework.util.StringUtils;import javax.servlet.*;
        import javax.servlet.annotation.WebFilter;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import java.io.IOException;/*** @author Mr.jia* @version 1.0*/
        @Slf4j
        @WebFilter(urlPatterns = "/*")
        public class LoginCheckFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) servletRequest;HttpServletResponse resp = (HttpServletResponse) servletResponse;//1.获取请求urlString url = req.getRequestURI().toString();log.info("请求的url:{}",url);//2.判断请求url中是否包含login,如果包含,说明是登录操作,放行if(url.contains("login")){log.info("登录操作,放行...");filterChain.doFilter(servletRequest,servletResponse);return;}//3.获取请求头中的令牌String jwt = req.getHeader("token");//4.判断令牌是否存在,如果不存在,返回错误结果(未登录)if(!StringUtils.hasLength(jwt)){log.info("请求头token为空,返回登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换  对象---json----->阿里巴巴fastJSONString notLogin = JSONObject.toJSONString(error);resp.getWriter().write(notLogin);return;}//5.解析token,如果解析失败,返回错误结果(未登录)try {JwtUtils.parseJWT(jwt);} catch (Exception e) {//解析失败e.printStackTrace();log.info("解析令牌失败,返回登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换  对象---json----->阿里巴巴fastJSONString notLogin = JSONObject.toJSONString(error);resp.getWriter().write(notLogin);return;}//6.放行log.info("令牌合法,放行");filterChain.doFilter(servletRequest,servletResponse);}
        }
        

  2. 拦截器Interceptor
    1. 简介&快速入门
      1. package com.itheima.interceptor;import org.springframework.stereotype.Component;
        import org.springframework.web.servlet.HandlerInterceptor;
        import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;/*** @author Mr.jia* @version 1.0*/
        @Component
        public class LoginCheckInterceptor implements HandlerInterceptor {@Override //目标资源方法运行前运行,返回true:放行,false:不放行public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}@Override //目标资源方法运行后运行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}@Override //视图渲染完毕后运行,最后运行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");}
        }
        

        定义拦截器

      2. package com.itheima.config;import com.itheima.interceptor.LoginCheckInterceptor;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.context.annotation.Configuration;
        import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
        import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @author Mr.jia* @version 1.0*/
        @Configuration//配置类
        public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**");}
        }
        

        配置拦截器

    2. 详解(拦截路径,执行流程)
    3. 登录校验-Interceptor
      1. /*** @author Mr.jia* @version 1.0*/
        @Slf4j
        @Component
        public class LoginCheckInterceptor implements HandlerInterceptor {@Override //目标资源方法运行前运行,返回true:放行,false:不放行public boolean preHandle(HttpServletRequest servletRequest, HttpServletResponse servletResponse, Object handler) throws Exception {//1.获取请求urlString url = servletRequest.getRequestURI().toString();log.info("请求的url:{}",url);//2.判断请求url中是否包含login,如果包含,说明是登录操作,放行if(url.contains("login")){log.info("登录操作,放行...");return true;}//3.获取请求头中的令牌String jwt = servletRequest.getHeader("token");//4.判断令牌是否存在,如果不存在,返回错误结果(未登录)if(!StringUtils.hasLength(jwt)){log.info("请求头token为空,返回登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换  对象---json----->阿里巴巴fastJSONString notLogin = JSONObject.toJSONString(error);servletResponse.getWriter().write(notLogin);return false;}//5.解析token,如果解析失败,返回错误结果(未登录)try {JwtUtils.parseJWT(jwt);} catch (Exception e) {//解析失败e.printStackTrace();log.info("解析令牌失败,返回登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换  对象---json----->阿里巴巴fastJSONString notLogin = JSONObject.toJSONString(error);servletResponse.getWriter().write(notLogin);return false;}//6.放行log.info("令牌合法,放行");return true;}@Override //目标资源方法运行后运行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}@Override //视图渲染完毕后运行,最后运行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");}
        }

相关文章:

过滤器Filter,拦截器Interceptor

过滤器Filter 快速入门 详情 登录校验-Filter package com.itheima.filter;import com.alibaba.fastjson.JSONObject; import com.itheima.pojo.Result; import com.itheima.utils.JwtUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils…...

kafka整理

kafka整理 一、kafka概述 kafka是apache旗下一款开源的顶级的消息队列的系统, 最早是来源于领英, 后期将其贡献给apache, 采用语言是scala.基于zookeeper, 启动kafka集群需要先启动zookeeper集群, 同时在zookeeper记录kafka相关的元数据 kafka本质上就是消息队列的中间件产品…...

为什么有些情况下需要重写equals()和hashCode()方法?

目录 方法作用实战案例 方法作用 equals():判断对象是否相等,比如判断是否能放入Set集合中 情况1:没有重写equals()方法:由于所有类的默认基类都是Object类,所以默认使用Object类的equals()方法,那就是对象…...

14-Vue技术栈之Vue3快速上手

目录 1.Vue3简介2. Vue3带来了什么2.1 性能的提升2.2 源码的升级2.3 拥抱TypeScript2.4 新的特性 1、海贼王,我当定了!——路飞 2、人,最重要的是“心”啊!——山治 3、如果放弃,我将终身遗憾。——路飞 4、人的梦想是…...

JavaScript高级三、深入面向对象

零、文章目录 JavaScript高级三、深入面向对象 1、编程思想 (1)面向过程介绍 面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 (2&…...

static

1. 静态局部变量 : 用于函数体的内部修饰变量,这种变量的生存期长于该函数。 2. 静态全局变量: 定义在函数体外,用于修饰全局变量,表示该变量只在本文件可见。 3. 静态函数: 准确的说,静态函数跟…...

zabbix动作执行失败 No media defined for user.

问题 zabbix动作执行失败 No media defined for user. 详细问题 解决方案 1(导航栏)用户 → \rightarrow →报警媒介 → \rightarrow →添加 2 选择类型 → \rightarrow →收件人 → \rightarrow →添加 3 更新 解决原因 笔者由于未点击更新钮导…...

JavaScript this 关键字

在JavaScript中,this关键字是一个特殊的关键字,它在函数内部使用,用于引用当前执行上下文中的对象。 this的值是在函数调用时动态确定的,它取决于函数的调用方式。下面列举了几种常见的调用方式和this的取值: 1. 全局…...

ubuntu基本信息查询

查询CPU信息 cat /proc/cpuinfo cat /proc/stat top lscpu 查询内存 free -m Options: -b, --bytes show output in bytes -k, --kilo show output in kilobytes -m, --mega show output in megabytes -g, --giga show output in gigab…...

Revit问题:创建牛腿柱和快速生成圈梁

一、Revit中如何用体量创建牛腿柱 牛腿:悬臂体系的挂梁与悬臂间必然出现搁置构造,通常就将悬臂端和挂梁端的局部构造,又称梁托。牛腿的作用是衔接悬臂梁与挂梁, 并传递来自挂梁的荷载。牛腿柱可以用于桥梁、厂房的搭建&#xff0c…...

k8s节点删除

1.设置该节点为不可调度状态 kubectl cordon k8s-node01 2.驱逐该节点上的pod kubectl drain k8s-node01 --ignore-daemonsets --delete-local-data 若是有pod删除不掉则加上--force参数强制驱逐 3.从集群中删除该node节点 kubectl delete node k8s-node01 4.在k8s-node…...

45°装备系统

45装备系统,规则:1、45 脚后剧情,场景地面出现,个体视角,非群体。2、产生寒暖对立,衣饰自动改变。3、地图下方块蛇,脚步顺逆差,让衣饰自动改变后出现形态特效。(形成进入…...

逻辑漏洞学习-身份验证漏洞

逻辑漏洞就是程序在实现业务逻辑上存在的错误,辑漏洞的出现通常是因为程序在设计业务逻辑时考虑不够全面,或者程序员的思维过程存在瑕疵,没有充分考虑到各种可能的情况 大部分程序员在设计的时候,目标是实现功能需求,…...

【ChatGPT】ChatGPT自动生成思维导图

参考视频:https://edu.csdn.net/learn/38346/613917 应用场景:自学,“研一学生如何学习机器学习”的思维导图 问:写一个“研一学生如何学习机器学习”的思维导图内容,以markdown代码块格式输出 # 研一学生如何学习…...

cf1200构造15道

最近做构造,想对比下先做后看答案归纳,留下思路之后直接看答案归纳,然后再统一检测,还有直接看答案,归纳,检测三种方法哪种效率高些,于是先做个十五题试试第一个方法,花3天写了15道构…...

【JavaSE】Java基础语法(十七)

文章目录 1. final2. 代码块2.1 代码块概述2.2 代码块分类 1. final fianl关键字的作用 final代表最终的意思,可以修饰成员方法,成员变量,类 final修饰类、方法、变量的效果 fianl修饰类:该类不能被继承(不能有子类&a…...

《Spring Guides系列学习》guide11 - guide15

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…...

软件测试面试了一个00后,让我见识到了什么是内卷届的天花板

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资也不低,面试的人很多,但平均水平很让人失望。令我印象最深的是一个00后测试员,他…...

JAVA BigDecimal 比较大小 、计算

1&#xff1a;比较大小 注意&#xff1a;使用compareTo&#xff08;&#xff09;方法比较大小时 参与比较的两个值 必须有值 不能为空 BigDecimal a new BigDecimal("3"); BigDecimal b new BigDecimal("4"); if (a.compareTo(b) < 0) { System.…...

并发编程Bug的根源

并发编程Bug的根源 并发编程Bug是指在多线程编程中出现的错误。并发编程需要考虑多个线程同时执行的情况&#xff0c;因此需要特别小心&#xff0c;以避免出现各种问题。在本文中&#xff0c;我们将探讨并发编程Bug的根源&#xff0c;并提供一些例子&#xff0c;以帮助读者更好…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...