拦截方式之Filter、Interceptor 、Aspect

springboot+aspect实现springaop拦截指定方法.zip 项目中含有一整个springboot实现aop的功能,在拦截的方法形式上有两种一种是通过切点设置为拦截某个包路径下面的类中的所有方法;还有一种是基于某个自定义注解的. 立即下载

一、Filter

这是java规范的一个过滤器,会拦截请求。在SpringBoot中一般有两种配置方式。

这种过滤器拦截并不知道你用的是哪一个Controller处理也不知道你用哪一个方法处理。

通过@Component加入容器

@Component
public class TimerFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Time  filter init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Time filter start");
        long startTime = new Date().getTime();
        // 放行
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("time filter:"+(new Date().getTime()-startTime));
        System.out.println("time filter finish");
    }

    @Override
    public void destroy() {
        System.out.println("Time filter destroy");
    }
}

通过配置类加入容器

@Configuration  // 声明这个类是配置类
public class WebConfig {
    @Bean
    public FilterRegistrationBean timeFilter() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new TimerFilter());
        // 设置拦截路径
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        return registrationBean;
    }
}

二、Interceptor

这种是Spring框架自带的拦截器,它会处理自己写的拦截器,也会拦截BasicErrorController。

可以拿到处理的Controller和对应的方法,但是拿不到具体的请求参数。

通过@Component加入容器

@Component
public class TimeInterceptor implements HandlerInterceptor {

    /**
     * 控制器方法处理之前执行
     */
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {
        System.out.println("preHandle");
        // 获取处理器的类名
        System.out.println(((HandlerMethod) handler).getBean().getClass().getName());
        // 获取调用的方法名
        System.out.println(((HandlerMethod) handler).getMethod().getName());
        httpServletRequest.setAttribute("startTime", new Date().getTime());
        return false;
    }

    /**
     * 控制器方法处理之后执行
     * 控制器方法处理时抛异常调用则不执行
     */
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
        Long startTime = (Long) httpServletRequest.getAttribute("startTime");
        System.out.println("time interceptor 耗时" + (new Date().getTime() - startTime));
    }

    /**
     * 控制器方法抛不抛异常都会被执行
     */
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("afterCompletion");
        Long startTime = (Long) httpServletRequest.getAttribute("startTime");
        System.out.println("time interceptor 耗时" + (new Date().getTime() - startTime));
        System.out.println("ex is" + e);
    }
}

通过配置类加入容器

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private TimeInterceptor timeInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 多个拦截器有顺序之分
        registry.addInterceptor(timeInterceptor);
    }

}

三、Aspect

@Aspect
@Component
public class TimeAspect {

    // 环绕通知
    @Around("execution(* cn.yujiago.controller.UserController.*(..))")
    public Object handleControllerMethod(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("time aspect start");
        // 获取请求参数
        Object[] args = proceedingJoinPoint.getArgs();
        for (Object arg : args) {
            System.out.println(arg.getClass().getName());
            System.out.println("arg is " + arg);
        }
        long startTime = new Date().getTime();
        // 执行目标方法,并获取返回值
        Object obj = proceedingJoinPoint.proceed();
        System.out.println("time aspect 耗时" + (new Date().getTime() - startTime));
        System.out.println("time aspect end");
        return obj;
    }
}
  • 过滤器(Filter):可以拿到原始的http请求,但拿不到请求的控制器和请求控制器中方法的信息。

  • 拦截器(Interceptor):可以拿到请求的控制器和方法,却拿不到请求方法的参数。

  • 切片(Aspect): 可以拿到方法的参数,但是却拿不到http请求和响应的对象。

这里写图片描述

密码学新手必看:三大顶级会议论文下载与阅读指南(附完整资源链接) 本文为密码学新手提供了系统性的三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文学习指南。内容涵盖如何高效获取最新论文资源、结构化精读论文的方法论,以及将理论转化为代码实践的路径,旨在帮助初学者快速构建密码学知识体系并应用于研究。 阅读详情

相关推荐

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

Hystrix 请求命令 & 异常处理

1.请求命令 请求命令就是以继承类的方式来代替前面的注解方式。 接着上文,首先定义一个helloCommand: public class HelloCommand extends HystrixCommand<String> { RestTemplate restTemplate; public HelloCommand(Setter setter,RestTemplate restTemplate) { super(setter);

那杯热咖啡 787

摩擦纳米发电机测试系统全解析:从硬件配置到软件控制

本文全面解析摩擦纳米发电机(TENG)测试系统,涵盖硬件配置、软件控制及系统集成。详细介绍NI USB-6003等采集卡的选择与使用,以及一体化控制软件的功能与优势,帮助研究人员高效评估纳米材料发电性能。系统支持自动测试与数据分析,显著提升测试效率与准确性。

weixin_28720767的博客 460

拦截机制中Aspect、ControllerAdvice、Interceptor、Fliter之间的区别详解

在项目的开发中,在某些情况下,我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect。 Spring中的拦截机制,如果出现异常的话,异常的顺序是从里面到外面一步一步的进行处理,如果到了最外层都没有进行处理的话,就会由tomcat容器抛出异常. 1.过滤器:Filter :可以获得Http原始的请求和响应信息,但是拿不到相应方法的信息 2.拦截器:Interceptor:可以获得Http原始的请求和响应信息,

Ahuuua的博客 3035

【NAS系统】DSM7.2部署SVN服务

早期的群晖版本可以在套件中心找到SVN Server直接安装,然后配置仓库和用户。但‌2提到DSM7.0之后套件中心没有SVN了,得用Docker。

qq_38350004的博客 4847

QT/C++实现健壮HTTP POST客户端:从基础到异常处理与性能优化

HTTP协议作为客户端与服务器通信的基石,其POST方法在数据提交、API交互等场景中扮演着核心角色。其工作原理基于请求-响应模型,通过封装TCP连接与协议细节,为应用层提供了简洁的数据传输接口。在C++桌面与嵌入式开发中,直接使用底层Socket实现HTTP不仅复杂且易出错,而利用框架进行高级封装能显著提升开发效率与代码健壮性。QT框架的`QNetworkAccessManager`等组件正是为此设计,它通过信号槽机制提供异步网络编程模型,有效管理连接与协议解析。一个健壮的HTTP客户端需要妥善处理网络波

weixin_29176179的博客 384

Aspect拦截方法,并支持事务后置处理

aspect拦截方法并在事务提交后触发异步方法

Zhtt的博客 1334

【OpenClaw从入门到精通】第07篇:2026实测!零基础开发OpenClaw自定义Skill——招聘外呼自动邀约完整教程

本文聚焦OpenClaw自定义Skill开发全流程,针对现成技能无法满足个性化场景(如专属招聘流程、内部系统对接)的痛点,以“招聘外呼自动邀约”为实战案例,从概念认知、环境搭建、分步开发到测试优化,手把手教读者从零构建自定义Skill。内容涵盖Skill目录结构、SKILL.md核心配置、Python主逻辑实现、API对接、安全配置等关键环节,融入2026年ClawHavoc事件安全警示,强调最小权限、凭证安全等开发原则。所有代码经实测可运行,步骤详尽且兼顾新手友好与进阶需求。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1193

通过@Aspect方式进行接口拦截

创建一个工具类,将@Aspect注解加上(@Aspect:作用是把当前类标识为一个切面供容器读取) import com.thechenfan.utils.RedisUtils; import com.thechenfan.utils.RequestHolder; import com.thechenfan.utils.Response; import com.thechenfan.utils.ResponseCode; import lombok.extern.slf4j.Slf4j; impo

偏点一 2141

对偶分解算法详解及其Python实现

对偶分解算法是一种广泛应用于求解凸优化问题的有效方法,尤其在大规模数据处理和分布式计算中展现出强大的实用性。在许多实际应用中,直接求解原始问题可能由于计算复杂度过高、资源受限或问题规模过大而变得不可行。这时,对偶分解方法为我们提供了一种高效的替代方案。对偶分解算法的核心思想是将复杂的原问题转化为其对应的拉格朗日对偶问题。通过引入拉格朗日乘子并构造对偶函数,该方法在一定程度上简化了问题的求解过程。特别是,对于包含多个约束条件的大规模优化问题,对偶分解可以将原问题分解为若干个小规模、相互独立的子问题。

闲人编程的博客 1750

Langchain cannot connect with Azure SQL Database

Langchain 无法连接到 Azure SQL 数据库

suiusoar 633

拦截请求的三种方式 Filter、Interceptor、Aspect

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34026484的博客 280

Python与CAD系列基础篇(十)图形复制、移动、删除

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。进行图形复制、移动、删除的方法。pyautocad方式。pyautocad方式。

weixin_43894929的博客 2209

spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解

springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过滤器和拦截器的区别与联系。 2 拦截器与过滤器之间的区别 从上面对拦截器与过滤器的描述来看,它俩是非常相似的,都能对客户端发来的请求进行处理,它们的区别如下: 拦截机制有三种: 1.过滤器(Filter)能拿到http请求,但是拿不到处理请求方法的信息。 2.拦截器(Interc...

赵树祥的博客 6403

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Filter、Interceptor和Aspect对请求的拦截,有什么不同?

在使用Spring MVC开发RESTful API的时候,我们经常会使用Java的拦截机制来处理请求,Filter是Se...

码农小胖哥 2138

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

filter、interceptor、controllerAdvice、aspect执行顺序

过滤器、拦截器的执行顺序

u014365523的博客 7121

spring boot 拦截 以及Filter和interceptor 、Aspect区别

一、通过Filter这个大家很熟悉了吧,这是java规范的一个过滤器,他会拦截请求。在springboot中一般有两种配置方式。这种过滤器拦截并不知道你用的是哪一个Controller处理也不知道你用哪一个方法处理。 过滤器使用的主要是反射 ;拦截器使用的主要是回调 ;AOP使用的主要是动态代理。 一个请求过来 ,先进行过滤器处理,看程序是否受理该请求。过滤器放过后, 程序中的拦截器进行处理,处理完后进入被AOP动态代理重新编译过的主要业务类进行处理 。 Filter:和框架无关,可以控制最初的ht..

lixinkuan的博客 3016

Filter(过滤器)、interceptor(拦截器)和Aspect(切面)的使用及区别

在工作中如何选择拦截机制去处理我们的业务请求,过滤器,拦截器,还是切面的选择一直比较模糊,今天花时间整理一下 概述 1,Filter 首先,过滤器是服务端的一个组件,是基于servlet实现从客户端访问服务端web资源的一种拦截机制,对请求request和响应response都进行过滤,依赖于serverlet容器,使用时,实现Filter接口,在web.xml里配置对应的class还有mapping-url,springboot工程可以通FilterRegisteration配置后,设置要过滤的URL,

分享、总结 3703

【Spring】Filter、Interceptor、Aspect的设计及区别

Filter、Interceptor、Aspect的设计及区别 1) Filter 定义 基于Servlet架构,Spring无法控制,也无法拿到Spring控制的参数 public class TimeFilter implements Filter { @Override public void doFilter(ServletRequest request, Se...

chenghan_yang的博客 1600

java的Filter(过滤器),Interceptor(拦截器) 和 Aspect(切面)

Filter是servlet层面的,由Servlet容器(如Tomcat)支持,只能在web程序中使用,实现了javax.servlet.Filter接口是Spring Web层面的(Structs也有), 它是由Spring容器进行管理,并不依赖Tomcat等容器,既可以应用在web程序中,也可以应用在非web程序中,实现了org.springframework.web.servlet接口Aspect是Spring层面的,由Spring容器进行管理,有Spring的地方都可以使用。

拥有必珍惜 1571

一文详解过滤器Filter、拦截器Interceptor和切面Aspect的区别

一文详解过滤器Filter、拦截器Interceptor和切面Aspect的区别

loseyourself94的博客 1431

Filter、Interceptor和Aspect的区别

目录 Filter Filter的实现方式 Interceptor Interceptor拦截器的实现方式 Aspect 切面拦截的实现方式 总结: 在使用Spring MVC开发RESTful API的时候,我们经常会使用Java的拦截机制来处理请求,Filter是Servlet Api过滤器,Interceptor则是Spring自带的拦截器,而Aspect切面是Spring...

灵熙云工作室 1910

filter、interceptor、aspect应如何选择?

目录 前言 Filter过滤器 Interceptor拦截器 Aspect切片 总结 前言 大家应该听说过过滤器、拦截器、切面,印象上都能够起到截断拦截的作用,在做一些业务需求时,不知道如何选择,今天就来介绍一下他们之间的区别。 Filter过滤器 过滤器可以拦截到方法的请求和响应(ServletRequest request, ServletResponse response),并对请求响应做出过滤操作。 过滤器依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,一个过滤

孔繁玉的专栏 598

过滤器Filter和拦截器Interceptor 、切面Aspect的两种理解

spring boot 拦截 以及Filter和interceptor 、Aspect区别 ​ 今天学习一下RESTFul api拦截 ​ 大概有三种方式 一、通过Filter这个大家很熟悉了吧,这是java规范的一个过滤器,他会拦截请求。在springboot中一般有两种配置方式。 ​ 这种过滤器拦截并不知道你用的是哪一个Controller处理也不知...

Apple_Boy的博客 972

Filter、interceptor和Aspect的使用及区别

filteraspect入参原理依赖于servlet容器,与框架无关Spring框架拦截器,基于Java反射机制动态代理(jdk动态代理/cglib)范围三者功能类似,但各有优势,从过滤器–》拦截器–》切面,拦截规则越来越细致,执行顺序依次是过滤器、拦截器、切面。一般情况下数据被过滤的时机越早对服务的性能影响越小,因此我们在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是aop。比如权限校验,一般情况下所有的请求都需要做登录校验,此时就应该使用过滤器在最顶层做校验;...

科技互联网领域深度探索者,乐于分享与写作。 1683

RESTful API的拦截:过滤器Filter、拦截器Interceptor、切片Aspect

过滤器能够过滤请求,但是不能够拿到是那个controller的那个方法 拦截器能拿到controller的那个方法,但是不能拿到方法的请求参数值 切片能够拿到详细的请求参数值 三者执行顺序 Filter -> Interceptor -> Aspect ->Controller 一、过滤器Filter(不知道是那个控制器以及那个方法来处理的) 需求:通过过...

一点光辉的博客 1399
上一篇: Spring Boot之@Transactional
下一篇: 【Shiro】用户名密码或手机号短信登录(多realm认证)
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值