拦截器(Interceptor)的使用
在Java Web开发中,拦截器(Interceptor)是一种动态拦截请求和响应的对象,它可以在请求被控制器处理之前和之后执行一些预处理和后处理逻辑。要定义一个拦截器并使其生效,通常需要以下几个步骤:
1. 定义拦截器类
首先,你需要创建一个实现了 HandlerInterceptor 接口的类。这个接口定义了三个方法:preHandle、postHandle 和 afterCompletion,分别用于在请求处理之前、请求处理之后但在视图渲染之前、以及整个请求处理完成之后执行逻辑。
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Component
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在请求处理之前执行的逻辑System.out.println("Pre Handle");return true; // 返回true表示继续流程(即调用下一个拦截器或处理器);返回false表示流程中断,直接通过response输出,不再继续调用其他的拦截器或处理器}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在请求处理之后但在视图渲染之前执行的逻辑System.out.println("Post Handle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在整个请求处理完成之后执行的逻辑System.out.println("After Completion");}
}
2. 注册拦截器
接下来,你需要在Spring配置中注册这个拦截器。这可以通过Java配置或XML配置来完成。
XML配置方式
如果你使用的是XML配置,你可以在Spring MVC的配置文件中添加mvc:interceptors元素来注册拦截器:
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/api/**"/><mvc:exclude-mapping path="/api/login"/><bean id="myInterceptor" class="com.example.MyInterceptor"/></mvc:interceptor>
</mvc:interceptors>
Java配置方式
如果你使用的是Java配置(基于@Configuration的配置),你可以通过实现WebMvcConfigurer接口并重写addInterceptors方法来注册拦截器:
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;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(myInterceptor).addPathPatterns("/**") // 拦截所有路径.excludePathPatterns("/login"); // 排除/login路径}
}
3. 拦截器配置
确保你的Spring配置(无论是Java配置还是XML配置)已经被正确加载。如果你使用的是Spring Boot,通常Spring Boot会自动加载@Configuration类中的配置。如果你使用的是传统的Spring MVC项目,你需要确保配置文件被正确地包含在项目的构建路径中。
4. 拦截器执行流程
拦截器的执行流程是由Spring框架控制的,不需要编写额外的代码。当请求到达时,框架会自动按照注册的拦截器顺序执行。
5. 拦截器的作用
以下是一个拦截器中实现权限校验的示例:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 检查用户是否已经登录if (request.getSession().getAttribute("user") == null) {// 如果用户未登录,则重定向到登录页面response.sendRedirect("/login");return false;}return true;
}
通过以上步骤,你就可以定义一个拦截器并使其在你的Web应用中生效了。拦截器可以用于执行各种任务,如日志记录、身份验证、权限检查等。
相关文章:
拦截器(Interceptor)的使用
在Java Web开发中,拦截器(Interceptor)是一种动态拦截请求和响应的对象,它可以在请求被控制器处理之前和之后执行一些预处理和后处理逻辑。要定义一个拦截器并使其生效,通常需要以下几个步骤: 1. 定义拦截…...
线段树例题题解
卫星覆盖(NOI1997) 题面: SERCOI(Space-Earth Resource Cover-Observe lnstitute) 是一个致力于利用卫星技术对空间和地球资源进行覆盖观测的组织。现在他们研制成功一种新型资源观测卫星 -SERCOI-308。这种卫星可以…...
AI提示词工程的“优化背后”:如何通过精准提示提升模型性能?
提示词工程(Prompt Engineering)已经成为推动AI模型如GPT等发挥其强大能力的核心。AI模型的输出质量与输入的提示词密切相关。因为之前已经大致用过一段时间提示词,所以这篇文章集中在有一定基础,起码对提示词不陌生,想要去设计和优化提示词+处理复杂问题的时候不知道如何…...
c# Record关键字
在 C# 9.0 中引入了 record 关键字,用于定义记录类型(Record Types)。记录类型是一种轻量级的数据载体,专注于表示数据,它提供了内置的相等性比较、生成属性和方法等功能,使得编写数据类更加简洁和高效。 …...
高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安装过程
前言 Nginx WebUI 是一个为 Nginx 提供图形化管理界面的工具。通过 WebUI,用户可以轻松管理 Nginx 配置,而无需直接编辑配置文件,尤其适合新手用户和频繁修改配置的场景。 官网文档:nginxWebUI - 文档 本文将分享为什么选择 ngin…...
家政预约小程序04活动管理表结构设计
目录 1 创建活动表2 创建活动规则表3 创建活动参与记录表总结 为了满足我们日常的营销,我们通常需要搞一些活动,比如满减、折扣、团购等。启动活动后,会在首页进行显示,当用户访问小程序的时候,就可以参与活动…...
谷歌浏览器的在线存储功能使用方法
谷歌浏览器不仅是目前全球使用最广泛的网络浏览器之一,它还集成了许多实用的功能来提升用户体验。其中,谷歌浏览器的在线存储功能允许用户将数据保存在云端,实现跨设备的无缝同步和共享。本文将详细介绍如何在谷歌浏览器中使用这一功能。 一、…...
HT-HaiBOX边缘计算盒 智慧工厂方案,智慧医疗方案,智慧加油站方案,智慧安防方案,智慧城市方案;方案定制开发
背景介绍 在当今数字化时代,各个行业对于智能化视频监控设备的需求日益增长。无论是安防监控,还是智慧工厂、智慧城市等领域,都需要高效、智能的设备来保障安全和提高生产效率。然而,传统的视频监控设备存在诸多痛点:…...
回调机制实现观察者模式
观察者设计模式,允许对象在状态变化时通知其他依赖对象,通常通过回调函数实现。 在回调机制中,可以注册多个回调函数,以便在特定事件发生时依次调用它们。下面是一个示例,展示如何在 C 中实现一个简单的事件管理器&am…...
并发编程系列(一) -多线程技术快速入门
最近对 Java 并发编程技术知识进行了重新整理,再次献上文章合集索引,感兴趣的小伙伴可以直接点击如下地址快速阅读。 并发编程系列(一) -多线程技术快速入门并发编程系列(二) -Thread类介绍并发编程系列(三) -synchronized关键字介绍并发编程系列(四) -v…...
单元测试入门和mockup
Java 新手入门:Java单元测试利器,Mock详解_java mock-CSDN博客 这个是典型的before when assert三段式,学一下单测思路 这个没有动态代理,所以是直接class(对比下面) Jmockit使用笔记_增加代码覆盖率_覆盖try catch_使用new Mock…...
蓝桥杯(Java)(ing)
Java前置知识 输入流: (在Java面向对象编程-CSDN博客里面有提过相关知识------IO流) // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…...
【Linux-多线程】线程互斥(锁和它的接口等)
一、线程互斥 我们把多个线程能够看到的资源叫做共享资源,我们对共享资源进行保护,就是互斥 1.多线程访问问题 【示例】见一见多线程访问问题,下面是一个抢票的代码,共计票数10000张,4个线程去抢 之前我们展示过封…...
[江科大STM32] 第五集快速建立STM32工程模板——笔记
保存,进去选芯片型号,我们是F10C8T6 一个MD,还有所有.c.h 这里所有文件 这里所有文件...
流水线并行举例说明;GPU 的细粒度问题
GPU 的细粒度与模型并行和流水线并行关系 使用模型并行和流水线并行之后会涉及到一个模型切分细粒度的问题,先切分多头(并行执行),每一个多头在切分不同阶段(串行执行)。这种情况下GPU的细粒度是多少 在这种模型并行和流水线并行结合且按多头和阶段切分的情况下,GPU 的…...
如何确保Kafka集群的高可用?
大家好,我是锋哥。今天分享关于【如何确保Kafka集群的高可用?】面试题。希望对大家有帮助; 如何确保Kafka集群的高可用? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 要确保 Kafka 集群 的高可用性,需要…...
计算机毕业设计Python+Spark考研预测系统 考研推荐系统 考研数据分析 考研大数据 大数据毕业设计 大数据毕设
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Oracle SqlPlus常用命令简介
参考资料 【SQL*Plus】SETシステム変数の設定前後の具体例 目录 一. 执行系命令1.1 执行系统命令1.2 执行sql脚本文件1.2.1 在数据库中执行sql脚本1.2.2 通过sqlplus执行sql脚本 二. show命令2.1 显示SqlPlus中的全部环境变量2.2 显示指定环境变量的设置 三. 时间显示3.1 set …...
8.若依系统监控与定时任务
帮助开发者和运维快速了解应用程序的性能状态。 数据监控 定时任务 实现动态管理任务。 需求:每间隔5s,控制台输出系统时间。 新建的任务类必须在指定目录ruoyi-quartz模块下的task包下。 状态设置为启动 执行策略 场景:比如一个任务每个…...
《计算机组成及汇编语言原理》阅读笔记:p160-p176
《计算机组成及汇编语言原理》学习第 12 天,p160-p176 总结,总计 17 页。 一、技术总结 1.PowerPC (1)programming model(mode) As in most modern computers, there are at least two separate views of the system (formally called programming m…...
抖音无水印视频批量下载全攻略:从痛点解决到高效管理
抖音无水印视频批量下载全攻略:从痛点解决到高效管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...
5步攻克AI到PSD无损转换:设计师必备的矢量分层工作流指南
5步攻克AI到PSD无损转换:设计师必备的矢量分层工作流指南 【免费下载链接】ai-to-psd A script for prepare export of vector objects from Adobe Illustrator to Photoshop 项目地址: https://gitcode.com/gh_mirrors/ai/ai-to-psd 在数字设计的协作流程中…...
BLE安全实战:从协议栈到应用层,构建防“降级”攻击的立体防御
1. BLE安全威胁与"降级攻击"的本质 当你用手机解锁智能门锁时,有没有想过蓝牙信号可能正在被隔壁楼的设备监听?2019年某知名智能锁被曝光的漏洞就是典型案例——攻击者通过伪造蓝牙MAC地址,诱使门锁将安全连接降级为不加密通信。这…...
实战指南:基于快马AI构建企业级软件安装程序,实现环境检测与静默部署
今天想和大家分享一个实战经验:如何用InsCode(快马)平台快速构建企业级软件安装程序。这个需求来源于我们团队最近的一个项目交付,客户要求安装包必须像专业商业软件那样稳定可靠。 环境检测功能实现 安装程序最基础也最重要的就是环境检测。我们通过平…...
SwitchCase语句详解:从基础到实战
一、switch case 是什么?switch case 是多条件分支语句,专门用来判断固定值的场景。比如:根据分数等级 A/B/C/D 输出评价根据菜单数字 1/2/3/4 执行不同功能根据星期 1~7 做不同处理特点:只能判断整型、字符型(不能判断…...
Mujoco 进阶指南:程序化模型编辑与动态场景构建实战
1. 为什么需要程序化模型编辑 当你第一次接触Mujoco时,可能和我一样都是从XML文件开始学习的。XML确实直观易懂,适合初学者快速上手。但当你需要构建复杂的动态场景时,手动编辑XML文件就会变得异常繁琐。比如要创建一个受风力影响的树林场景&…...
FLUX.1-dev FP8技术指南:AI绘画优化与低配置运行解决方案
FLUX.1-dev FP8技术指南:AI绘画优化与低配置运行解决方案 【免费下载链接】flux1-dev 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/flux1-dev ⚠️ 问题篇:AI绘画的硬件门槛挑战 显存瓶颈:普通设备的最大障碍 当你尝试…...
YimMenu:5大核心功能重塑你的GTA V游戏体验
YimMenu:5大核心功能重塑你的GTA V游戏体验 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu 你…...
嵌入式开发知识管理:基于BERT文本分割的STM32项目文档整理
嵌入式开发知识管理:基于BERT文本分割的STM32项目文档整理 每次接手一个老旧的STM32项目,你是不是也感到头疼?打开工程文件夹,里面混杂着各种版本的代码、零散的调试日志、不同工程师留下的注释,还有一堆硬件连接说明…...
vant-weapp版本升级技术指南:从0.x到最新版的平滑迁移方案
vant-weapp版本升级技术指南:从0.x到最新版的平滑迁移方案 【免费下载链接】vant-weapp 轻量、可靠的小程序 UI 组件库 项目地址: https://gitcode.com/gh_mirrors/va/vant-weapp 引言 在小程序开发过程中,组件库的版本升级是一项常见但具有挑战…...
