ssm拦截器

news2024/9/24 15:17:44

ssm拦截器 #:

与之前的过滤器不一样,过滤器是指在servlet中的,而拦截器是属于SpringMVC的,可以对请求的数据进行提前操作和后置操作:

  • 先自己创建一个拦截器Interception类(其实人家真名叫Interceptor,这是我随便起的类名),在里面对请求的参数,相应的参数等等进行各种操作
  • 有了拦截器了,你还需要一个工具类,来用将拦截器放进工具类中(工具类中可以放入各种东西,如放行类等)
  • 工具类准备妥当了,就需要SpringMVC可以在加载的时候知道它,于是,又在SpringMVC中加上注解,保证可以扫描到它

在这里插入图片描述

拦截器:重写接口HandlerInterceptor中的三个方法,接口中的方法都被default修饰了,所以需要主动手动重写方法,不写也不会报错,具体看注释

package com.itjh.contorller.interception;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//保证能注册成Bean
@Component
public class Interception implements HandlerInterceptor {
    //原始数据被拦截之前进行的操作
    //如果返回值是false时,就会停止
    // 接下来的所有操作,也就是说后面的流程会被打断
    @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");
    }
    //原始数据被拦截之后进行的操作
    //且在postHandle之后进行操作
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterHandle");
    }
}

工具类:在其中还放了放行类

package com.itjh.config;

import com.itjh.contorller.interception.Interception;
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.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class SpringMvcSupportConfig implements WebMvcConfigurer {
    @Autowired
    private Interception interception;

    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //前面位置的包的请求访问被拦截时,会自动进入后面的包里面找数据
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }

    //添加拦截器,并且写出访问哪一个路径时要拦截
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interception).addPathPatterns("/books","/books/**");
    }
}

Springmvc配置类:

package com.itjh.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
//扫描控制类和放行前端需求SpringMvcSupportConfig,还有包含了拦截器的工具类
@ComponentScan({"com.itjh.contorller","com.itjh.config"})
//转换器,这样就可以json的数据转换了
@EnableWebMvc
public class SpringMvcConfig {
}

另一种方法:

将工具类去掉,直接在SpringMVC中写,以此来代替工具类,但是这样代码就和spring写一块,焊在一块了

SpringMVC配置类:工具类就可以直接删掉了

package com.itjh.config;

import com.itjh.contorller.interception.Interception;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
//扫描控制类和放行前端需求SpringMvcSupportConfig
@ComponentScan({"com.itjh.contorller","com.itjh.config"})
//转换器,这样就可以json的数据转换了
@EnableWebMvc
//实现接口,这个接口和直接创建工具类实现的接口不一样
public class SpringMvcConfig implements WebMvcConfigurer {
    @Autowired
    private Interception interception;
    
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //前面位置的包的请求访问被拦截时,会自动进入后面的包里面找数据
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
    
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interception).addPathPatterns("/books");
    }
}

ssm拦截器中的参数 #:

在这里插入图片描述

比如想知道得到的数据的类型等:如图中箭头所示
在这里插入图片描述
比如想知道时间:

//保证能注册成Bean
@Component
public class Interception implements HandlerInterceptor {
    //原始数据被拦截之前进行的操作
    //如果返回值是false时,就会停止
    // 接下来的所有操作,也就是说后面的流程会被打断
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String date=request.getHeader("Date");
        System.out.println("date: "+date);
        System.out.println("preHandle");
            return true;
    }

再比如想知道当前访问的方法就:结果中有方法的描述:handler: com.itjh.contorller.serv#getAll()

//保证能注册成Bean
@Component
public class Interception implements HandlerInterceptor {
    //原始数据被拦截之前进行的操作
    //如果返回值是false时,就会停止
    // 接下来的所有操作,也就是说后面的流程会被打断
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("handler: "+handler);
        System.out.println("preHandle");
            return true;
    }

ssm拦截器的执行顺序:

只要其中任意一个拦截器的preHandle()方法返回值为false,程序就不会执行任意一个postHandle()方法
在这里插入图片描述
举个例子:
在这里插入图片描述
两个拦截器:

package com.itjh.contorller.interception;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//保证能注册成Bean
@Component
public class Interception implements HandlerInterceptor {
    //原始数据被拦截之前进行的操作
    //如果返回值是false时,就会停止
    // 接下来的所有操作,也就是说后面的流程会被打断
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        String date=request.getHeader("Date");
//        System.out.println("date1111: "+date);
//        System.out.println("handler11111: "+handler);
        System.out.println("preHandle11111");
            return true;
    }
    //原始数据被拦截之后进行的操作
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle11111");
    }
    //原始数据被拦截之后进行的操作
    //且在postHandle之后进行操作
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterHandle11111");
    }
}
package com.itjh.contorller.interception;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//保证能注册成Bean
@Component
public class Interception2 implements HandlerInterceptor {
    //原始数据被拦截之前进行的操作
    //如果返回值是false时,就会停止
    // 接下来的所有操作,也就是说后面的流程会被打断
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        String date=request.getHeader("Date");
//        System.out.println("date22222: "+date);
//        System.out.println("handler22222: "+handler);
        System.out.println("preHandle22222");
            return true;
    }
    //原始数据被拦截之后进行的操作
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle22222");
    }
    //原始数据被拦截之后进行的操作
    //且在postHandle之后进行操作
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterHandle222222");
    }
}

结果:

四月 18, 2023 4:55:52 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
preHandle11111
preHandle22222
[INFO] {dataSource-1} inited
postHandle22222
postHandle11111
afterHandle222222
afterHandle11111

在这里插入图片描述
最后:两个拦截器的先后顺序是那个代码在前面,哪个就先开始

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flutter dart中用ffi调用golang或C的动态链接库

本文介绍从dart中,通过ffi方式调用golang生成的动态链接库。 go/lib.go package mainimport "C"//export GetKey func GetKey() *C.char {theKey : "123-456-789"return C.CString(theKey) }func main() {}cd go go build -buildmodec-shared…

高通QSSI方式导致CI编译失败问题记录

一、问题背景 1、QSSI说明 QSSI 是 Qualcomm Single System Image 的缩写,高通平台从Android Q开始,为了解决Android碎片化问题,把system.img和vendor.img进一步拆分,增加了QSSI编译选项,QSSI就是用来编译system.img的…

数据结构(ArrayList)

文章目录一、线性表二、顺序表2.1 ArrayList(1)概念(2)ArrayList 的构造(3)ArrayList 的方法(4) ArrayList的遍历(5)ArrayList的优缺点2.2 链表一、线性表 概…

symmetric funtion and antisymmetric function(对称性函数和反对称性函数)

symmetric funtion and antisymmetric functionantisymmetric functionsymmetric funtion附录今天看资料的时候遇到了一个说法,文中提及,f(x)f\left(x\right)f(x) 是一个 antisymmetric function,看到这个说法有点儿懵,这里特来记…

上海亚商投顾:沪指逼近3400点 CPO概念股再度爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪沪指今日震荡反弹,午后逼近3400点关口,创业板指则小幅调整。CPO概念股再度爆发,…

[oeasy]python00134_[趣味拓展]python起源_历史_Guido人生_ABC编程语言_Tanenbaum

python 历史 回忆上次内容 颜文字是kaomoji 把字符变成一种图画的方法一层叠一层很多好玩儿的kaomoji是一层层堆叠起来的meme 虚拟的表情也在真实世界有巨大影响 一步步地影响 字符编码就是这样一步步发展过来的python也是 一步步 发展到今天的 python究竟是 怎么发展的呢&…

异常(throwable)

异常 异常分类 (1)Throwable类 所有的异常类型都是它的子类,它派生两个子类Error、Exception。 (2)Error类 表示仅靠程序本身无法恢复的严重错误(内存溢出动态链接失败、虚拟机错误)&#…

分布式定时任务

本文引用了谷粒商城的课程 定时任务 定时任务是我们系统里面经常要用到的一些功能。如每天的支付订单要与支付宝进行对账操作、每个月定期进行财务汇总、在服务空闲时定时统计当天所有信息数据等。 定时任务有个非常流行的框架Quartz和Java原生API的Timer类。Spring框架也可以…

【面试题】20个常见的前端算法题,你全都会吗?

现在面试中,算法出现的频率越来越高了,大厂基本必考 今天给大家带来20个常见的前端算法题,重要的地方已添加注释,如有不正确的地方,欢迎多多指正💕 大厂面试题分享 面试题库 前后端面试题库 (…

Spring 6 正式“抛弃”feign

近期,Spring 6 的第一个 GA 版本发布了,其中带来了一个新的特性——HTTP Interface。这个新特性,可以让开发者将 HTTP 服务,定义成一个包含特定注解标记的方法的 Java 接口,然后通过对接口方法的调用,完成 …

Simulink仿真封装中的参数个对话框设置

目录 参数和对话框窗格 初始化窗格 文档窗格 为了更加直观和清晰的分析仿真,会将多个元件实现的一个功能封装在一起,通过参数对话框窗格,可以使用参数、显示和动作选项板中的对话框控制设计封装对话框。如图所示: 参数和对话框…

刘二大人《Pytorch深度学习实践》第六讲逻辑斯蒂回归

文章目录线性回归和逻辑斯蒂回归的区别课上代码交叉熵函数的理解线性回归和逻辑斯蒂回归的区别 线性回归一般用于预测连续值变量,如房价预测问题。 线性回归的一般表达式为: 代价函数为MSE(均方误差): 其中权重thet…

Linux Shell 实现一键部署二进制Rabbitmq

rabbitmq 前言 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代…

openai的whisper语音识别介绍

openAI发布了chatgpt,光环一时无两。但是openAI不止有这一个项目,它的其他项目也非常值得我们去研究学习。 今天说说这个whisper项目 https://github.com/openai/whisper ta是关于语音识别的。它提出了一种通过大规模的弱监督来实现的语音识别的方法。…

C++之深入解析STL unordered_map的底层实现原理

C STL 标准库中,不仅是 unordered_map 容器,所有无序容器的底层实现都采用的是哈希表存储结构。更准确地说,是用“链地址法”(又称“开链法”)解决数据存储位置发生冲突的哈希表,整个存储结构如下所示&…

JVM 垃圾收集器详解

一、垃圾收集器 如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。《Java虚拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同的厂商、不同版本的虚拟机所包含的垃圾收集器都可能会有很大差别,不同的虚…

基于遗传算法的中药药对挖掘系统的设计与实现

用数据挖掘技术研究了中药方剂配伍的规律。主要工作:分析了关联规则存在的问题,引入双向关联规则的概念;介绍了遗传算法的基本原理,研究了遗传算法在数据挖掘中的应用;将方剂库转换为位图矩阵,大大提高搜索…

Mac重启清理缓存会怎么样 mac清理缓存怎么清理

众所周知,Mac电脑有着流畅的操作系统,因此,很多用户都会选择使用Mac电脑办公。随着日常使用,系统缓存数据越来越大,某些Mac电脑(尤其是小内存版本的Mac电脑)可能会出现“系统”占存储空间比例较…

初始单片机.md

1.如何将HEX文件烧录到单片机 STC-ISP STC-ISP是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用简便。 思路:将电脑磁盘上已存在的文件通过串口的方式下…

python中第三方库xlrd和xlwt的使用教程

excel文档名称为联系人.xls,内容如下: 一、xlrd模块用法 1.打开excel文件并获取所有sheet import xlrd# 打开Excel文件读取数据 data xlrd.open_workbook(联系人.xls)sheet_name data.sheet_names() # 获取所有sheet名称 print(sheet_name) # [银…