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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android 7 uc flash,UC浏览器7.2版新增加FLASH游戏支持功能[通俗易懂]

    android 7 uc flash,UC浏览器7.2版新增加FLASH游戏支持功能[通俗易懂]一直以来,FLASH游戏都是手机的一个硬伤,比如当前令人疯狂的偷菜游戏,一直以来也只能玩纯文字版或者图文版,而不能在手机上实现电脑一样的体验。就在5月19日,国内著名的手机浏览器UC发布了7.2正式版,其革命性的应用了FLASH10技术,使得手机能够完美支持FLASH游戏,彻底改变了开篇所说到的窘境。小编在新版本发布的第一时间,就对7.2正式版进行了“尝鲜”,让我们一起来看看UC浏览器FLASH的…

    2022年6月3日
    62
  • shift后门结论_连续五次shift

    shift后门结论_连续五次shift经常会看到一些服务器被入侵后,入侵者会留下一些各式各样的shift后门,五花八门的,各位网络管理员也看看自己的服务器的setch.exe是否被人替换了。这个直接5次shift后进入分区这个比较巧妙了,正常的最后那个按钮是灰色的,前两个是不可点击的,这个恰恰想法,点击后,会弹出一个cmd窗口。这个是比较常见的需要输…

    2022年9月18日
    0
  • pycharm将python程序打包_python 程序打包

    pycharm将python程序打包_python 程序打包关于使用Pycharm对python文件进行打包首先建立python项目的时候要按照标准来建设我使用的python配置的解释器,没有使用python的虚拟环境,因为虚拟环境建设出来的项目不是我想要的项目结构,包结构比较多,看着不是很舒服4.配置完成后点击创建创建完成后可以自己创建合适包结构创建完合适的包结构后,就可以编写python代码了,但要python代码运行开,需要配置运行环境9.环境配置调试好就可以运行调试python代码..

    2022年8月26日
    3
  • @SpringBootApplication_springboot启动类作用

    @SpringBootApplication_springboot启动类作用Args作用传递参数的一种方式;例如启动的时候java-jar–spring.profiles.active=prod或者更改自己的自定义配置信息;使用方式是–key=value它的信息优先于项目里面的配置;我们现在大部分项目都是用SpringBoot进行开发的,一般启动类的格式是SpringApplication.run(SpringBootDemoPropertiesApplication.class,args);但是好像平常一直也没有用到args;也没有穿过参数

    2022年9月4日
    3
  • CSGO开箱网站大全_csgo哪个开箱网站能直接取

    CSGO开箱网站大全_csgo哪个开箱网站能直接取csgo开箱网站有哪些?csgo开箱网站大全##以下国内知名CSGO开箱网站官网直达链接优惠码/推广码网站状态incsgocsgogo直接取回skinsdogcsgogo直接取回88skinscsgo直接取回skskinscsgogo直接取回npskinscsgogo直接取回fateskinscsgo直接取回yskins暂无可取回coolkaixiangcsgo直接取回piggycasecsgogo

    2022年10月6日
    0
  • 最小二乘法详解_通俗是啥意思

    最小二乘法详解_通俗是啥意思本文转自https://blog.csdn.net/bitcarmanlee/article/details/51589143,谢谢原作者辛苦整理。若侵权,告知即删。最小二乘是每个上过大学的同学都接触过的概念与知识点(当然可能纯文科的同学没接触过,但是一般纯文科的同学也不会看这篇文章好像)。最小二乘理论其实很简单,用途也很广泛。但是每次说到最小二乘,总感觉差了点什么似的,好像对于最小二乘的前世…

    2022年8月30日
    0

发表回复

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

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