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

拦截器(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应用中生效了。拦截器可以用于执行各种任务,如日志记录、身份验证、权限检查等。

http://www.lryc.cn/news/513033.html

相关文章:

  • 线段树例题题解
  • AI提示词工程的“优化背后”:如何通过精准提示提升模型性能?
  • c# Record关键字
  • 高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安装过程
  • 家政预约小程序04活动管理表结构设计
  • 谷歌浏览器的在线存储功能使用方法
  • HT-HaiBOX边缘计算盒 智慧工厂方案,智慧医疗方案,智慧加油站方案,智慧安防方案,智慧城市方案;方案定制开发
  • 回调机制实现观察者模式
  • 并发编程系列(一) -多线程技术快速入门
  • 单元测试入门和mockup
  • 蓝桥杯(Java)(ing)
  • 【Linux-多线程】线程互斥(锁和它的接口等)
  • [江科大STM32] 第五集快速建立STM32工程模板——笔记
  • 流水线并行举例说明;GPU 的细粒度问题
  • 如何确保Kafka集群的高可用?
  • 计算机毕业设计Python+Spark考研预测系统 考研推荐系统 考研数据分析 考研大数据 大数据毕业设计 大数据毕设
  • Oracle SqlPlus常用命令简介
  • 8.若依系统监控与定时任务
  • 《计算机组成及汇编语言原理》阅读笔记:p160-p176
  • TCP网络编程(三)—— 客户端的编写/服务器端和客户端的通信
  • 如何在谷歌浏览器中使用自定义模板
  • Day2 微服务 网关路由转发、网关登录校验、配置管理
  • Android 旋转盘导航栏
  • 空域降噪、频域降噪和时域降噪
  • Cornerstone3D:了解Nifti文件,并查看元数据
  • 设计模式の状态策略责任链模式
  • DevOps流程CICD之Jenkins使用操作
  • 【玩转23种Java设计模式】行为型模式篇:备忘录模式
  • Unity Shader TexelSize的意义
  • 三、STM32MP257系列之定制Yocto Machine