SpringMVC:拦截器(Interceptor)

1. 简介

拦截器(Interceptor)类似于过滤器(Filter) 

Spring MVC的拦截器作用是在请求到达控制器之前或之后进行拦截,可以对请求和响应进行一些特定的处理。拦截器可以用于很多场景下:

1. 登录验证:对于需要登录才能访问的网址,使用拦截器可以判断用户是否已登录,如果未登录则跳转到登录页面。
2. 权限校验:根据用户权限对部分网址进行访问控制,拒绝未经授权的用户访问。
3. 请求日志:记录请求信息,例如请求地址、请求参数、请求时间等,用于排查问题和性能优化。
4. 更改响应:可以对响应的内容进行修改,例如添加头信息、调整响应内容格式等。

拦截器和过滤器的区别在于它们的作用层面不同。

* 过滤器更注重在请求和响应的流程中进行处理,可以修改请求和响应的内容,例如设置编码和字符集、请求头、状态码等。
* 拦截器则更加侧重于对控制器进行前置或后置处理,在请求到达控制器之前或之后进行特定的操作,例如打印日志、权限验证等。

 

 2. 定义拦截器

实现HandlerInterceptor接口 选择性实现preHandle、postHandle、afterCompletion方法

* preHandle:处理器方法调用之前执行
  只有该方法有返回值,返回值是布尔类型,true放行,false拦截。
* postHandle:处理器方法调用之后执行
* afterCompletion:渲染完成后执行 

public class Interceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle执行啦");
        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执行啦");
    }
}

 3. 配置拦截器

方式一: 要在springmvc.xml中导入对应的包进行扫描

    <!--配置拦截器,基本方式:基于xml文件配置
    注意:默认对所有请求进行拦截-->
    <mvc:interceptors>
        <!--第一种方式,导入全类名-->
        <bean class="com.itgyl.springmvc.interceptors.Interceptor1"></bean>
    </mvc:interceptors>

方式二:基于注解实现

    <!--配置拦截器,基本方式:基于xml文件配置
    注意:默认对所有请求进行拦截-->
    <mvc:interceptors>
        <!--第二种方式,基于注解自动装配-->
         <ref bean="interceptor1"></ref>
    </mvc:interceptors>
@Component
public class Interceptor1 implements HandlerInterceptor {

4. 高级配置

     <!--拦截器高级配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--对所有路径进行过滤-->
            <mvc:mapping path="/**"/>
            <!--除了该路径不过滤-->
            <mvc:exclude-mapping path="/ok"/>
            <ref bean="interceptor1"></ref>
        </mvc:interceptor>
    </mvc:interceptors>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt Creator 输入中文

安装fcitx-libs-qt或fcitx-libs-qt5 查看系统自带libfcitxplatforminputcontextplugin.so位置 dpkg -L fcitx-frontend-qt5 | grep .so文件位于 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so将上述文件拷贝至Qt安装…

燕之屋被授予“国家食品企业质量安全检测技术示范中心(无锡)分中心”牌匾

5月27日&#xff0c;江苏教育界与产业界对话对接系列活动——新型食品与大健康产业协同创新发展大会在江南大学召开。会上&#xff0c;燕之屋荣获“国家食品企业质量安全检测技术示范中心&#xff08;无锡&#xff09;分中心”授牌&#xff0c;燕之屋副总经理、研发技术总监范群…

Linux内网数据代理与数据映射实验

背景介绍 有两台主机&#xff0c;其中一台可以联网&#xff0c;而另一台只能与联网主机&#xff0c;尝试通过配置&#xff0c;使该主机也能正常上网&#xff0c;这常应用于企业内部不联网的服务器&#xff0c;需要安全可靠或临时上网的场景&#xff0c;借助另一台可以上网的内…

Docker:认识Docker Bridge网络

文章目录 为什么需要网络管理Docker网络架构简介CNMLibNetwork驱动Docker网络管理命令网络命令基本操作网络详解docker Bridge网络 容器之间的网络通信DNS解析 为什么需要网络管理 容器的网络默认会与宿主机器以及其他的容器相互隔离&#xff0c;但是还需要考虑到下面的这些问…

微软将 AI 工具和软件的研发工作外包给 OpenAI

微软将 AI 工具和软件的研发工作外包给 OpenAI 科技媒体 CNBC 报道称&#xff0c;微软正计划将其人工智能&#xff08;AI&#xff09;工具和软件的开发工作外包给OpenAI&#xff0c;这对竞争对手谷歌来说无疑是一个利好消息。 Okta首席执行官Todd McKinnon表示&#xff0c;微…

GPT-4o多模态大模型的架构设计

GPT-4o&#xff1a;大模型风向&#xff0c;OpenAI大更新 OpenAI震撼发布两大更新&#xff01;桌面版APP与全新UI的ChatGPT上线&#xff0c;简化用户操作&#xff0c;体验更自然。同时&#xff0c;全能模型GPT-4o惊艳亮相&#xff0c;跨模态即时响应&#xff0c;性能卓越且性价比…

vue防止多次点击

1.新建js 在util文件夹下新建一个preventReClick.js文件&#xff0c;名字可自定义&#xff0c;文件夹也可以根据你自己的目录来 2.js文件中通过自定义指令的形式封装一个名为preventReClick的指令 import Vue from vue // 通过自定义指令的形式封装一个名为preventReClick的…

动手学深度学习31 深度学习硬件 CPU和GPU

动手学深度学习31 深度学习硬件 CPU和GPU CPU和GPU主频 QA PPT&#xff1a; https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_1.pdf 视频&#xff1a; https://www.bilibili.com/video/BV1TU4y1j7Wd/?p2&spm_id_frompageDriver&vd_sourceeb04c9a33e87ceba9c9a2e5f09…

..\USER\stm32f10x.h(298): error: #67: expected a “}“

原keil4的示例工程在用keil5打开之后出现报错&#xff1a; ..\USER\stm32f10x.h(298): error: #67: expected a "}" 在去掉手动添加的一个宏定义STM32F10X_HD后即可正常编译&#xff0c;因为KEIL5已经自动添加了

免费生成短链接,常用短网址生成站点推荐!

什么是短链接 "短链接"俗称"短网址"&#xff0c;通俗的讲就是将长的URL网址通过程序计算等方式&#xff0c;转换为简短的网址字符串&#xff0c;更便于使用者在第三方平台引用网址&#xff0c;节省字符数空间。 短链接最大的特点就是短&#xff0c;今天给…

大模型应用产品指北

一、试用类型 计算机视觉Computer Vision&#xff1a;Text-to-image(文生图) 二、国内产品 Aliyun通义千问 【体验】 可以替代Stable Diffusion、Midjourney;支持风格、滤镜; [传送门&#xff1a;通义万相] 【体验】Transformer架构&#xff1b;中英双语&#xff1b;开源可以…

WWDC24 快速回顾

今天凌晨&#xff0c;苹果公司在2024年全球开发者大会&#xff08;WWDC24&#xff09;上&#xff0c;发布了一系列的系统更新。然而&#xff0c;对于期待苹果带来突破性创新的消费者来说&#xff0c;今年的大会似乎并没有达到预期的震撼效果。 下面让我看看&#xff0c;苹果都带…

【小白专用 已验证24.6.12】MySQL连接使用-创建数据库和创建数据表

【小白专用 已验证24.6.12】Mysql 8.0的安装配置教程&#xff08;详细&#xff09;_mysql安装教程8.2-CSDN博客 1.在Windows开始搜索输入Mysql,并选择第一个打开。 2.输入安装时的密码&#xff0c;再回车&#xff0c;就连接上 MySQL 了 1. MySQLSQL语句通用语法 (1)SQL语句可以…

Compshare平台使用体验分享

一、引言 随着AI技术的飞速发展&#xff0c;对高性能计算资源的需求也在不断增加。为了满足广大AI研究者和开发者的需求&#xff0c;各类算力共享平台应运而生。其中&#xff0c;Compshare平台凭借其卓越的性能和便捷的操作&#xff0c;迅速成为用户关注的焦点。本文将通过对隶…

[leetcode]删除链表中倒数第k个结点

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* trainningPlan(ListNode* head, int cnt) {int n 0;ListNode* node nullptr;for (node head; node; node node->next) {n;}for (node head; n > cnt; n--) {node node->next;}retu…

遥控玩具车电机驱动应用中的双H桥驱动芯片

遥控玩具车的基本工作原理是通过无线电遥控器发送信号&#xff0c;这些信号被玩具车内的接收器接收并解码&#xff0c;从而控制玩具车的运行。根据车身外型的不同&#xff0c;可以分为&#xff1a;普通的私家房车、越野车、货柜车、翻斗车等等。遥控器的操作&#xff0c;如前进…

鸿蒙元服务未来是能一“通”多端的前端形态?

2024年&#xff0c;华为鸿蒙的热度只增不减。 在2023年底就有业内人士透露&#xff0c;华为明年将推出不兼容安卓的鸿蒙版本&#xff0c;未来IOS、鸿蒙、安卓将成为三个各自独立的系统。 果不其然&#xff0c;执行力超强的华为&#xff0c;与2024年1月18日的开发者&#xff0…

AC/DC电源模块:多种应用需求的通用能源解决办法

BOSHIDA AC/DC电源模块&#xff1a;多种应用需求的通用能源解决办法 AC/DC电源模块是一种通用能源解决方案&#xff0c;可满足多种应用需求。它将交流电转换为直流电&#xff0c;提供给各种电子设备以稳定的电源。AC/DC电源模块拥有多种优势&#xff0c;包括高效能、可靠性好、…

Win11如何屏蔽个人数据跨境传输提示

今天重启电脑&#xff0c;出现系统【个人数据跨境传输】的更新提示&#xff0c;为了快速开始办公就给点同意了&#xff0c;中午休息时&#xff0c;总是觉得不爽&#xff0c;必须关闭这个。 后来我知道&#xff0c;到了这一步的时候&#xff0c;可以有其他方法终止&#xff0c;参…

【算法实战】每日一题:18.2 ST 表(Sparse Table)

1.题目 给定一个长度为 n 的数列和 m 个查询&#xff0c;每个查询指定一个闭区间&#xff0c;要求对每个查询输出该区间内的最小值。 2.思路 其实用Python的话&#xff0c;我们可以直接用Python内置的min函数做&#xff0c;但是这种方法很容易超时&#xff0c;所以我们用ST表…