拦截器(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…...
ESP32-S2开发入门:用VSCode远程连接WSL,打造丝滑的嵌入式开发工作流
ESP32-S2开发环境优化:VSCode与WSL的高效协作方案 嵌入式开发工程师常面临跨平台协作的挑战——既需要Linux环境的强大工具链,又依赖Windows的图形界面友好性。本文将揭示如何通过VSCode远程连接WSL,构建一个无缝衔接的ESP32-S2开发环境&…...
别再被Linux的free命令骗了!手把手教你读懂‘可用内存’available的真实含义
别再被Linux的free命令骗了!手把手教你读懂‘可用内存’available的真实含义 每次在终端输入free -h,看到那一行数字跳动时,你是否也曾经盯着"free"列那个可怜的小数值心跳加速?别急,你可能正在经历一场Linu…...
别再手动编译库了!一招永久设置Vivado全局Modelsim仿真环境
永久配置Vivado与Modelsim联调环境的终极方案 每次新建FPGA工程都要重新配置仿真工具路径和编译库文件?这种重复劳动不仅浪费时间,还容易因配置不一致导致仿真失败。本文将揭示一种被多数工程师忽略的"一劳永逸"配置方案,通过系统级…...
从Wi-Fi信号到降噪耳机:聊聊‘相位’在工程师日常调试中的那些事儿
从Wi-Fi信号到降噪耳机:聊聊‘相位’在工程师日常调试中的那些事儿 调试设备时突然出现的信号干扰,或是降噪耳机里挥之不去的底噪,往往让工程师们头疼不已。这些看似无关的问题背后,其实都藏着一个共同的关键因素——相位。不同于…...
在i.MX6UL开发板上移植ncnn:嵌入式AI部署实战与性能优化
1. 项目概述:为什么要在边缘设备上跑神经网络?最近几年,AI应用从云端下沉到边缘的趋势越来越明显。无论是智能摄像头里的人脸识别、工业质检设备上的缺陷检测,还是智能音箱里的语音唤醒,都要求模型能在本地、低功耗的设…...
量化感知训练中的权重震荡:成因、影响与抑制策略
1. 量化感知训练中的“震荡”现象:一个被忽视的优化陷阱在将神经网络模型部署到手机、摄像头、嵌入式芯片这类资源受限的边缘设备时,量化几乎是必经之路。简单说,量化就是把模型里那些动辄32位的浮点数权重和激活值,压缩成8位、4位…...
某包丨图片+视频去水印去除工具
首先下载软件(工具在末尾),然后运行,自动打开网页如下: 接着打开某包,找到你要去除水印的图片或者视频的链接: 工具下载: 链接:https://pan.quark.cn/s/aec2cdde94ed...
小米手表表盘设计革命:无需编程,5分钟打造个性化智能表盘
小米手表表盘设计革命:无需编程,5分钟打造个性化智能表盘 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 关键词: Mi-Creat…...
Sitara处理器PRU-ICSS架构解析:工业自动化信息传输系统设计实战
1. 项目概述:工业自动化中的信息传输挑战与Sitara方案在工业自动化领域,信息传输的实时性、可靠性与灵活性,直接决定了生产线的“智商”与“反应速度”。想象一下,一条高速运转的汽水装瓶线,如果无法在毫秒级内感知到原…...
从2023蓝桥杯JavaB组省赛真题看算法思维与实战技巧
1. 从真题看算法思维培养 去年参加蓝桥杯省赛时,我对着那道阶乘求和题足足愣了十分钟。题目要求计算1!到202320232023!的和的最后9位数字,我第一反应就是暴力计算每个阶乘值再累加。结果刚算到20!就发现long类型溢出了,当时整个人都懵了。后来…...
