Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java之过滤器Filter、拦截器Interceptor与面向切面AOP

Java之过滤器Filter、拦截器Interceptor与面向切面AOP

作者头像
九转成圣
发布于 2024-04-10 09:26:09
发布于 2024-04-10 09:26:09
25100
代码可运行
举报
文章被收录于专栏:csdncsdn
运行总次数:0
代码可运行

Java之过滤器Filter、拦截器Interceptor与面向切面AOP

Filter的使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
@WebFilter(urlPatterns = {"/*"})
public class CustomFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 在请求进入容器后 servlet前
        System.out.println("CustomFilter doFilter 前");
        // 放行请求
        chain.doFilter(request, response);
        // 请求离开servlet后
        System.out.println("CustomFilter doFilter 后");
    }
}

Interceptor的使用

自定义拦截器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CustomInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求处理之前进行拦截处理 返回 true 表示继续处理请求,返回 false 则表示拦截请求
        System.out.println("CustomInterceptor preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 请求处理之后调用,但在视图被渲染之前(Controller方法调用之后)
        System.out.println("CustomInterceptor postHandle 请求处理之后调用,但在视图被渲染之前(Controller方法调用之后)");

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 整个请求处理完毕后调用,即视图渲染完毕或者发生异常时调用
        System.out.println("CustomInterceptor afterCompletion 整个请求处理完毕后调用,即视图渲染完毕或者发生异常时调用");

    }
}

基于springmvc编写配置类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomInterceptor())
                .addPathPatterns("/**"); // 设置拦截的路径
    }

}

AOP的使用

引入依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
</dependency>

编写配置类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Aspect
@Component
public class HelloAop {
    @Pointcut("execution(* com.lxw.afi.controller.HelloController.hello(..))")
    public void pointcut() {

    }

    @Before("pointcut()")
    public void before(JoinPoint joinPoint) {
        System.out.println("@Before");
    }

    @AfterThrowing("pointcut()")
    public void afterThrowing() {
        System.out.println("@AfterThrowing");
    }

    @AfterReturning("pointcut()")
    public void afterReturning() {
        System.out.println("@AfterReturning");
    }

    @After("pointcut()")
    public void after() {
        System.out.println("@After");
    }

    @Around("pointcut()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        Object result;
        try {
            System.out.println("@Around...方法执行前");
            result = pjp.proceed();
            System.out.println("@Around...方法执行后");
        } catch (Throwable throwable) {
            System.out.println("@Around...抛出异常后");
            throw throwable;
        } finally {
            System.out.println("@Around...finally");
        }
        return result;
    }

区别

  1. Filter是 servlet提供的Interceptor和AOP是spring提供的
  2. Filter和Interceptor是基于URL进行的,AOP基于类的元数据(包、类、方法名、参数等)
  3. Filter、Interceptor可以拦截所有请求action和静态资源[css,js…],AOP只能拦截action请求
  4. 执行顺序Filter>Interceptor>AOP
  5. 细致程度AOP>Interceptor>Filter

使用场景

在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是aop。 比如: 权限校验,一般情况下,所有的请求都需要做登陆校验,此时就应该使用过滤器在最顶层做校验;日志记录,一般日志只会针对部分逻辑做日志记录,而且牵扯到业务逻辑完成前后的日志记录,因此使用过滤器不能细致地划分模块,此时应该考虑拦截器,然而拦截器也是依据URL做规则匹配,因此相对来说不够细致,因此我们会考虑到使用AOP实现,AOP可以针对代码的方法级别做拦截,很适合日志功能。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
农银一面:Filter、Interceptor、Spring AOP 的执行顺序
在我们的日常开发工作中,Filter(过滤器)、Interceptor(拦截器)和 AOP(面向切面编程)是非常常用的 3 种请求处理技术。在不同的应用场景中,使用它们都可以在不影响主业务逻辑的前提下为系统增加额外的功能。面试官去问这个问题的时候,一般是想考察求职者的技术深度和对框架机制的理解。本篇我们从 3 者的基本概念及使用来分析解答下这道面试题。
程序员皮皮林
2025/02/08
1070
拦截器(Interceptor)与过滤器(Filter)
  拦截器是面向切面(AOP)编程中应用的一种统一处理方案,就是在你的Controller、Servie或者一个Method调用一个Method,或者在Method调用一个Method之后,统一的进行处理的方案,基于Java的反射机制。
BUG弄潮儿
2021/06/25
4.6K0
拦截器(Interceptor)与过滤器(Filter)
浅谈 | 过滤器、监听器、拦截器和AOP
最近在进行系统的日志模块重构工作,在选择技术实现的时候在过滤器和拦截器之间飘忽不定,于是决定抽点时间将过滤器和拦截器进行深度分析,顺便把监听器和AOP等内容也复习一下。
啃饼思录
2023/03/18
1.7K0
浅谈 | 过滤器、监听器、拦截器和AOP
Spring学习笔记(8)--拦截器Interceptor和过滤器Filter的区别详解
过滤器和拦截器 底层实现方式大不相同:过滤器是基于函数回调的,拦截器则是基于Java的反射机制(动态代理)实现的。
黄规速
2022/04/14
3.8K0
Spring学习笔记(8)--拦截器Interceptor和过滤器Filter的区别详解
spring boot拦截器和过滤器_过滤器的实现
1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
全栈程序员站长
2022/09/23
1.6K0
spring boot拦截器和过滤器_过滤器的实现
Spring Boot2(七):过滤器拦截器的使用
过滤器和拦截器两者都具有AOP的切面思想,关于aop切面,可以看上一篇文章。过滤器filter和拦截器interceptor都属于面向切面编程的具体实现。
鸟不拉屎
2019/07/06
3.3K0
SpringBoot实现过滤器、拦截器与切片
Filter是J2E中来的,可以看做是Servlet的一种“加强版”,它主要用于对用户请求进行预处理和后处理,拥有一个典型的处理链。Filter也可以对用户请求生成响应,这一点与Servlet相同,但实际上很少会使用Filter向用户请求生成响应。
用户5224393
2020/02/26
1.1K0
过滤器与拦截器的N个区别,别傻傻分不清了
Spring的拦截器与Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。但它们之间又有不少区别,很多朋友工作多年,可能还没有深刻的了解它们的具体使用以及它们之间的区别。本文带大家全面了解一下它们的使用、实现机制以及区别。
程序新视界
2020/12/28
1.1K0
过滤器与拦截器的N个区别,别傻傻分不清了
过滤器 和 拦截器 6个区别,别再傻傻分不清了
周末有个小伙伴加我微信,向我请教了一个问题:老哥,过滤器 (Filter) 和 拦截器 (Interceptor) 有啥区别啊? 听到题目我的第一感觉就是:简单!
程序员小富
2020/06/04
1.1K0
过滤器 和 拦截器 6个区别,别再傻傻分不清了
拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别
本来想记录一下关于用户登陆和登陆之后的权限管理、菜单管理的问题,想到解决这个问题用到Interceptor,但想到了Interceptor,就想到了Filter,于是就想说一下它们的执行顺序和区别。关于Interceptor解决权限和菜单管理的问题,在放在下一篇写吧,就酱紫。
好好学java
2019/05/06
4.8K0
拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别
面试突击90:过滤器和拦截器有什么区别?
过滤器(Filter)和拦截器(Interceptor)都是基于 AOP(Aspect Oriented Programming,面向切面编程)思想实现的,用来解决项目中某一类问题的两种“工具”,但二者有着明显的差距,接下来我们一起来看。
磊哥
2022/10/28
3.6K0
springboot下使用拦截器和过滤器[通俗易懂]
Spring MVC的拦截器(Interceptor)和Filter不同,但是也可以实现对请求进行预处理,后处理。先介绍它的使用,只需要两步: 1.1 实现拦截器 实现拦截器可以通过继承HandlerInterceptorAdapter类。如果preHandle方法return true,则继续后续处理。
全栈程序员站长
2022/09/09
7820
servlet的过滤器filter和springmvc的拦截器Interceptor
Servlet的过滤器(Filter)和Spring MVC的拦截器(Interceptor)都是用于在请求处理过程中对请求进行拦截和处理的组件。它们之间的主要区别在于它们的作用范围和使用方式。
后台技术汇
2024/09/23
1580
servlet的过滤器filter和springmvc的拦截器Interceptor
【Spring学习】过滤器和拦截器
过滤器是实现对请求资源(jsp、servlet、html)的过滤功能,是一个运行在服务器的程序,优先于请求资源(jsp、servlet、html)之前执行。
pbinlog
2022/03/29
7730
【Spring学习】过滤器和拦截器
万字长文带你彻底学会拦截器与过滤器
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
一只胡说八道的猴子
2021/02/04
8920
万字长文带你彻底学会拦截器与过滤器
SSM项目中使用拦截器和过滤器
Spring MVC 也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定 的功能,自定义的拦截器必须实现 HandlerInterceptor 接口
别团等shy哥发育
2023/02/25
7210
SSM项目中使用拦截器和过滤器
springboot过滤器和拦截器的实现和区别
springmvc中有两种很普遍的AOP实现: 1.过滤器(Filter) 2.拦截器(Interceptor)
Java编程指南
2019/08/02
2.1K0
面试官:谈谈过滤器和拦截器的区别?
而过滤器(Filter)则可以对几乎所有的请求都能起作用 包括css js等资源文件
路人甲Java
2023/08/29
4510
面试官:谈谈过滤器和拦截器的区别?
spring boot拦截器和过滤器_java拦截器的作用
b.过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境
全栈程序员站长
2022/09/23
9190
【二十二】springboot整合拦截器实战并对比过滤器
本章和上章相比,通过使用拦截器的方式去模拟处理token的校验,再之后通过两者的对比,比较一下两者的不同。下面开始拦截器的基础用法学习。
小z666
2024/06/21
3580
【二十二】springboot整合拦截器实战并对比过滤器
推荐阅读
相关推荐
农银一面:Filter、Interceptor、Spring AOP 的执行顺序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验