spring拦截器和过滤器有什么区别_拦截器和过滤器的区别面试

spring拦截器和过滤器有什么区别_拦截器和过滤器的区别面试简介这几天在回顾Spring的AOP时,对过滤器,拦截器,AOP的关系有点好奇,故记录做以备份。在实现一些公共逻辑的时候,很多功能通过过滤器,拦截器,AOP都能实现,但是不同的方式有不同的效率。具体有什么区别,看下文描述。前后端交互基本逻辑过滤器过滤器拦截的是URLSpring中自定义过滤器(Filter)一般只有一个方法,返回值是void,当请求到达web容器时,会探测当…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

简介

这几天在回顾Spring的AOP时,对过滤器,拦截器,AOP的关系有点好奇,故记录做以备份。在实现一些公共逻辑的时候,很多功能通过过滤器,拦截器,AOP都能实现,但是不同的方式有不同的效率。具体有什么区别,看下文描述。

前后端交互基本逻辑

spring拦截器和过滤器有什么区别_拦截器和过滤器的区别面试

过滤器

过滤器拦截的是URL

Spring中自定义过滤器(Filter)一般只有一个方法,返回值是void,当请求到达web容器时,会探测当前请求地址是否配置有过滤器,有则调用该过滤器的方法(可能会有多个过滤器),然后才调用真实的业务逻辑,至此过滤器任务完成。过滤器并没有定义业务逻辑执行前、后等,仅仅是请求到达就执行。

特别注意:过滤器方法的入参有request,response,FilterChain,其中FilterChain是过滤器链,使用比较简单,而request,response则关联到请求流程,因此可以对请求参数做过滤和修改,同时FilterChain过滤链执行完,并且完成业务流程后,会返回到过滤器,此时也可以对请求的返回数据做处理。

拦截器

拦截器拦截的是URL

拦截器有三个方法,相对于过滤器更加细致,有被拦截逻辑执行前、后等。Spring中拦截器有三个方法:preHandle,postHandle,afterCompletion。分别表示如下

public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o)表示被拦截的URL对应的方法执行前的自定义处理

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView)表示此时还未将modelAndView进行渲染,被拦截的URL对应的方法执行后的自定义处理,。

public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e)表示此时modelAndView已被渲染,执行拦截器的自定义处理。

AOP(面向切面)

面向切面拦截的是类的元数据(包、类、方法名、参数等)

相对于拦截器更加细致,而且非常灵活,拦截器只能针对URL做拦截,而AOP针对具体的代码,能够实现更加复杂的业务逻辑。具体类型参照其他博客。

三者使用场景

三者功能类似,但各有优势,从过滤器–》拦截器–》切面,拦截规则越来越细致,执行顺序依次是过滤器、拦截器、切面。一般情况下数据被过滤的时机越早对服务的性能影响越小,因此我们在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是aop。比如权限校验,一般情况下,所有的请求都需要做登陆校验,此时就应该使用过滤器在最顶层做校验;日志记录,一般日志只会针对部分逻辑做日志记录,而且牵扯到业务逻辑完成前后的日志记录,因此使用过滤器不能细致地划分模块,此时应该考虑拦截器,然而拦截器也是依据URL做规则匹配,因此相对来说不够细致,因此我们会考虑到使用AOP实现,AOP可以针对代码的方法级别做拦截,很适合日志功能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172387.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月23日 上午9:36
下一篇 2022年8月23日 上午9:46


相关推荐

  • input文本域选中后会出现蓝边框去除「建议收藏」

    input文本域选中后会出现蓝边框去除「建议收藏」input文本域选中后会出现蓝边框去除input图示:input  {         border:0;outline:none;   //去除蓝色边框       } 学习outline属性 outline(轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。 outline 简写属性在一个声明中设置所有的轮廓属性。 可以按顺序设置如…

    2022年6月13日
    61
  • 软件设计方案说明书模板

    软件设计方案说明书模板软件设计方案说明书目录文章目录软件设计方案说明书目录使用说明书修改记录审阅人 1 引言 1 1 编写目的 1 2 背景 1 3 参考资料 1 4 术语定义及说明 2 设计概述 2 1 任务和目标 2 1 1 需求概述 2 1 2 运行环境概述 2 1 3 条件与限制 2 1 4 详细设计方法和工具 3 系统详细需求分析 3 1 详细需求分析 3 2 详细系统运行环境及限制条件分析接口需求分析 4 总体方案确认 4 1 系统总

    2026年2月15日
    1
  • 个人网站赚钱经营解密

    个人网站赚钱经营解密现在所有的网站都在考虑如何赚钱 个人网站也不例外 个人网站最开始的动机可能是出于兴趣或一种爱好 但时间一长 这些兴趣或爱好便为自己积累了许多资源 比如数量可观的访问量 当这些资源积累到一定程度的时候 商业意识比较敏感的个人网站站长便开始寻求开展电子商务 将自己手中的资源进行商业操作 从而 个人网站开始赚钱 当然 目前比较流行的个人网站赚钱方式可能更多的还是依赖于广告 但从目前个人网站的广告收入来看

    2026年3月26日
    2
  • 全民都在“养龙虾”,但你真的会“喂”吗?OpenClaw爆火背后的微调玄机

    全民都在“养龙虾”,但你真的会“喂”吗?OpenClaw爆火背后的微调玄机

    2026年3月14日
    2
  • ANSYS ICEM CFD 网格划分步骤简要总结[通俗易懂]

    ANSYS ICEM CFD 网格划分步骤简要总结[通俗易懂]

    2022年5月9日
    41
  • C语言 字符串分割

    C语言 字符串分割C语言字符串分割一、简述记–字符串分割,strtok()函数的使用例子、自己实现split()函数。二、例子代码#include<stdio.h>#include<string.h>/**函数:split*描述:按指定分隔符分割字符串*参数:* str:要分割的字符串* strLen:要分割…

    2022年6月9日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号