Java Web 过滤器和拦截器.

概念

过滤器即 Servlet 过滤器,参见 Servlet 过滤器入门示例。

拦截器(Interceptor)通常是由特定的框架提供的,不是 Java EE 标准的一部分。

Spring 提供了多种类型的拦截器,如方法拦截器(MethodInterceptor)和控制器拦截器(HandlerInterceptor)。

方法拦截器可以用于 AOP(面向切面编程),而控制器拦截器用于处理请求和响应。

拦截器示例

下面的示例演示如何使用 Spring MVC 的HandlerInterceptor

项目结构

SpringInterceptorExample/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── MyInterceptor.java
│   │   │           ├── HelloController.java
│   │   │           ├── WebConfig.java
│   │   │           └── Application.java
│   │   └── resources/
│   │       └── application.properties
└── pom.xml

1. Maven 依赖(pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>SpringInterceptorExample</artifactId><version>1.0-SNAPSHOT</version><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.example.Application</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>

2. 拦截器实现(MyInterceptor.java

package com.example;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("Before handling the request: " + request.getRequestURI());return true; // 返回 true 继续处理请求}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("After handling the request: " + request.getRequestURI());}
}

3. 控制器实现(HelloController.java

package com.example;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/hello")
public class HelloController {@GetMappingpublic String sayHello() {return "Hello, World!"; // 返回字符串响应}
}

4. Web 配置(WebConfig.java

package com.example;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("/hello/**"); // 拦截 /hello 路径}
}

5. 启动类(Application.java

package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

6. 运行项目

  1. 使用 Maven 构建项目:

    mvn clean package
    
  2. 运行 Spring Boot 应用:

    mvn spring-boot:run
    
  3. 在浏览器中访问http://localhost:8080/hello,你应该能看到 "Hello, World!" 的响应,同时在控制台中会输出拦截器的日志。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IPEX几代接口的区别

IPEX共分五代,简单判别IPEX接口是几代的方法是测量直径。 IPEX 1代 高度小于3.0mm,端子口径φ2.0 IPEX 2代 高度小于2.1mm,端子口径φ2.0 IPEX 3代 高度小于1.6mm,端子口径φ1.4 IPEX 4代 高度小于1.7mm,端子口径φ1.5 IPEX 5代 高度小于1.3mm,…

vue3:computed

扫码或者点击文字后台提问 原文: https://mp.weixin.qq.com/s/36dd--oj6jmkZblfJRh4iw computed 支持选项式写法 和 函数式写法 1.选项式写法 支持一个对象传入get函数以及set函数自定义操作2.函数式写法 只能支持一个getter函数不允许修改值的<template><div>&l…

2024 腾讯云双十一省钱攻略:如何选购服务器、操作指南

一、前言 每年的双十一,都是一个 “剁手狂欢” 的好时机,不仅是购物平台,各大云服务商也会在此期间推一、前言 每年的双十一,都是一个 “剁手狂欢” 的好时机,不仅是购物平台,各大云服务商也会在此期间推出力度空前的优惠活动。今年,我特别关注了腾讯云的双十一活动,发…

阿里云域名解析

第一步: 在域名解析这里修改记录类型是A 的,主机记录是@ 和www的即可。 第二步: 重新申请https证书,然后配置nginx 的配置文件https证实,然后重新启动nginx 命令: ./nginx -s reload

Codeforces Round 987 (Div. 2)

Codeforces Round 987 (Div. 2) 总结 A 常见的套路,将一个序列变为不下降序列所需要改变的值的最小数量,考虑最大能保留多少个,显然是求最长上升子序列,而这题给出的 \(a\) 序列保证不上升,所以只需要考虑相同长度的一段。 #include <iostream> #include <cstdio…

利用PyTorch的三元组损失Hard Triplet Loss进行嵌入模型微调

本文介绍如何使用 PyTorch 和三元组边缘损失 (Triplet Margin Loss) 微调嵌入模型,并重点阐述实现细节和代码示例。三元组损失是一种对比损失函数,通过缩小锚点与正例间的距离,同时扩大锚点与负例间的距离来优化模型。 https://avoid.overfit.cn/post/4b8a8e91f3274f8ca41b…

二分查找 理论 例题

递归代码int binary_search(int arr[],int left,int right,int key){if (left>right){//区间无效return -1;}int mid=left+(right-left)/2; //直接平均可能会溢出if(arr[mid]==key){return mid;}else if(key>arr[mid]){return binary_search(arr,mid+1,right,key); //右半…

统信 UOS 操作系统介绍

一、前言 近年来,软件国产化的呼声越来越高,而操作系统国产化是软件国产化过程中核心的一环,自然也不例外。目前国产操作系统有 统信UOS、麒麟(Kylin) 和 openEuler 等,本篇文章为大家介绍 统信UOS 操作系统,主要包括统信UOS 简介 版本介绍 选择建议与系统展示 总结二、…

经营分析是什么

在当今快速变化的商业环境中,大厂们越来越重视经营分析,这不仅是对企业经营状况的全面诊断,更是实现效益最大化的关键。近期一连有两个大厂(短视频、游戏)的朋友来聊经营分析,着实让我好奇了一下。经营分析这个东西,以往都是传统国企做得多,咋连他们也开始纠结了。 聊完…

2024-2025-1 20241318 《计算机基础与程序设计》第八周学习总结

这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP(如[2024-2025-1-计算机基础与程序设计])这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08这个作业的目标 加入云班课,参考本周学习资源自学教材 计算机科学概论(第七…

零基础入门Hadoop:IntelliJ IDEA远程连接服务器中Hadoop运行WordCount

今天我们来聊一聊大数据,作为一个Hadoop的新手,我也并不敢深入探讨复杂的底层原理。因此,这篇文章的重点更多是从实际操作和入门实践的角度出发,带领大家一起了解大数据应用的基本过程。我们将通过一个经典的案例——WordCounter,来帮助大家入门。简单来说,这个案例的目标…

NOIP2024 前集训:NOIP2024加赛 5

前言music 《浮光》看指尖拨响蝴蝶 扇动一场离别我推开无声岁月 续梦一页你我只是打个照面 可曾有过誓约走进熟悉却 陌生的思念啊……啊……你的眼眸 装满了时间你的身后 拥故事成篇此生如梦 愿细数流年与你同写 沧海桑田浮光掠影 重山彩云间你的伏线 穿越千百年人生不过 恍惚三…