精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一臉懵逼,面試官:過濾器和攔截器有啥區(qū)別?

開發(fā) 前端
一臉懵逼,面試官:過濾器和攔截器有啥區(qū)別?這個是不久前在面試的時候遇到的一個問題,當(dāng)時直接懵了,兩個單拎出來,雖然不太完全,但都大概知道可以對請求進(jìn)行攔截,放在一起比較,可真是頭疼。

這個是不久前在面試的時候遇到的一個問題,當(dāng)時直接懵了,兩個單拎出來,雖然不太完全,但都大概知道可以對請求進(jìn)行攔截,放在一起比較,可真是頭疼。

其實(shí)之前面試完就去學(xué)習(xí)了一波,只不過那個時候沒及時總結(jié),現(xiàn)在總結(jié)一下,以免日后遇到這類問題又給忘咯。

要理解這類問題,光靠死記硬背可能當(dāng)時有用,過一陣子就差不多忘了。要想真的牢記,我們必須要實(shí)操一下。

Filter的使用

首先,要使用Filter,必須實(shí)現(xiàn)javax.servlet.Filter接口:

  1. public interface Filter { 
  2.     //web應(yīng)用加載進(jìn)容器,F(xiàn)ilter對象創(chuàng)建之后,執(zhí)行init方法初始化,用于加載資源,只執(zhí)行一次。  
  3.     public default void init(FilterConfig filterConfig) throws ServletException {} 
  4.     //每次請求或響應(yīng)被攔截時執(zhí)行,可執(zhí)行多次。 
  5.     public void doFilter(ServletRequest request, ServletResponse response, 
  6.             FilterChain chain) throws IOException, ServletException; 
  7.     //web應(yīng)用移除容器,服務(wù)器被正常關(guān)閉,則執(zhí)行destroy方法,用于釋放資源,只執(zhí)行一次。 
  8.     public default void destroy() {} 
  • init和destroy是default方法,實(shí)現(xiàn)類可以不用實(shí)現(xiàn)。
  • doFilter必須實(shí)現(xiàn),也就是說,作為一個過濾器,doFilter必須要定義。
  • doFlilter方法中傳進(jìn)來的FilterChain對象用來調(diào)用下一個過濾器。

攔截器的使用

 

  1. public interface HandlerInterceptor { 
  2.     //攔截handler的執(zhí)行 --> 在HanlerMapping決定適合的handler之后,[在HandlerAdater調(diào)用handler之前執(zhí)行。] 
  3.     default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
  4.             throws Exception {      return true
  5.     }   //攔截handler的執(zhí)行 --> [在HandlerAdapter調(diào)用handler之后],在DispatcherServlet渲染視圖之前執(zhí)行 
  6.     default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 
  7.             @Nullable ModelAndView modelAndView) throws Exception { }   //視圖渲染后調(diào)用,且只有preHandle結(jié)果為true,才會調(diào)用 
  8.     default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, 
  9.             @Nullable Exception ex) throws Exception {  }} 
  10.  
  11. //DispatcherServlet 
  12. if (!mappedHandler.applyPreHandle(processedRequest, response)) { 
  13.     return; //遍歷所有的interceptors,調(diào)用preHandle方法,只有返回true,才能進(jìn)行下去 
  14. // 這里也就是處理Contrller 
  15. mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); 
  16. //視圖渲染 
  17. applyDefaultViewName(processedRequest, mv); 
  18. //視圖渲染之后調(diào)用 
  19. mappedHandler.applyPostHandle(processedRequest, response, mv); 

過濾器與攔截器到底有啥區(qū)別呢?

一、實(shí)現(xiàn)原理不同

過濾器的實(shí)現(xiàn)基于回調(diào)函數(shù)

攔截器基于Java的反射機(jī)制【動態(tài)代理】實(shí)現(xiàn)。

二、使用范圍不同

過濾器是Servlet的規(guī)范,需要實(shí)現(xiàn)javax.servlet.Filter接口,F(xiàn)ilter使用需要依賴于Tomcat等容器。

攔截器是Spring組件,定義在org.springframework.web.servlet包下,由Spring容器管理【又有更加豐富的生繆那個周期處理方法,細(xì)粒度,且能夠使用Spring中的資源】,不依賴Tomcat等容器。

三、觸發(fā)時機(jī)不同

這一段在HandlerInterceptor類的注釋上可以發(fā)現(xiàn),兩者的觸發(fā)時機(jī)是不同的:

 

一臉懵逼,面試官:過濾器和攔截器有啥區(qū)別?
  • 過濾器:對請求在進(jìn)入后Servlet之前或之后進(jìn)行處理。
  • 攔截器:對請求在handler【Controller】前后進(jìn)行處理。

 

一臉懵逼,面試官:過濾器和攔截器有啥區(qū)別?

四、執(zhí)行順序不同

同時配置了過濾器和攔截器的情形:

  1. MyFilter1 前 
  2. MyFilter2 前 
  3. MyInterceptor1 在Controller前執(zhí)行 
  4. MyInterceptor2 在Controller前執(zhí)行 
  5. controller方法執(zhí)行... 
  6. MyInterceptor2 Controller之后,視圖渲染之前 
  7. MyInterceptor1 Controller之后,視圖渲染之前 
  8. MyInterceptor2 視圖渲染完成之后執(zhí)行 
  9. MyInterceptor1 視圖渲染完成之后執(zhí)行 
  10. MyFilter2 后 
  11. MyFilter1 后 

過濾器的順序

每一次都將chain對象傳入,達(dá)到最后接口回調(diào)的效果:

 

一臉懵逼,面試官:過濾器和攔截器有啥區(qū)別?

攔截器的順序

preHandle1 -> preHande2 -> 【Controller】 -> postHandle2 -> postHandle1 -> afterCompletion2 -> afterComplention1preHandle按照注冊順序,后兩個與注冊順序相反。

  • 一個攔截器的preHandle為false,則之后的所有攔截器都不會執(zhí)行。
  • 一個攔截器的preHandle為true,則這個攔截器的triggerAfterCompletion一定會執(zhí)行。
  • 只有所有的攔截器preHandler都為true,也就是正常執(zhí)行,postHandle才會執(zhí)行。
  1. boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception { 
  2.     HandlerInterceptor[] interceptors = getInterceptors();    if (!ObjectUtils.isEmpty(interceptors)) { 
  3.         for (int i = 0; i < interceptors.length; i++) { 
  4.             HandlerInterceptor interceptor = interceptors[i];            //一旦當(dāng)前攔截器preHandle的返回值為false,那么從上一個可用的攔截器的afterCompletion開始 
  5.             if (!interceptor.preHandle(request, response, this.handler)) { 
  6.                 triggerAfterCompletion(request, response, null); 
  7.                 return false; //這里返回false意為 后續(xù)不進(jìn)行下去了。 
  8.             }            this.interceptorIndex = i;//interceptorIndex初始化為-1,只有當(dāng)前攔截器preHandle為true,才會賦值當(dāng)前的i。 
  9.         }    }    return true
  10. }void applyPostHandle(HttpServletRequest request, HttpServletResponse response, @Nullable ModelAndView mv)    throws Exception {    HandlerInterceptor[] interceptors = getInterceptors();    if (!ObjectUtils.isEmpty(interceptors)) { 
  11.         for (int i = interceptors.length - 1; i >= 0; i--) { 
  12.             HandlerInterceptor interceptor = interceptors[i];            interceptor.postHandle(request, response, this.handler, mv); 
  13.         }    }}void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, @Nullable Exception ex)    throws Exception {    HandlerInterceptor[] interceptors = getInterceptors();        for (int i = this.interceptorIndex; i >= 0; i--)  

五、控制執(zhí)行順序方式不同

兩者默認(rèn)都是使用注冊順序,如果想要認(rèn)為控制執(zhí)行的順序,方式略有不同:

  • 過濾器如果想要強(qiáng)制改變,可以使用@Order注解。
  • 攔截器如果使用order()方法

 

  1. @Order(2) 
  2. @Component 
  3. public class MyFilter1 implements Filter {} 
  4.  
  5. @Component 
  6. public class WebAdapter implements WebMvcConfigurer { 
  7.     @Autowired 
  8.     MyInterceptor1 myInterceptor1;    @Autowired 
  9.     MyInterceptor2 myInterceptor2;    @Override 
  10.     public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(myInterceptor1).addPathPatterns("/**").order(2); 
  11.         registry.addInterceptor(myInterceptor2).addPathPatterns("/**").order(1); 
  12.     }} 

總結(jié)

  • 原理實(shí)現(xiàn)上:過濾器基于回調(diào)實(shí)現(xiàn),而攔截器基于動態(tài)代理。
  • 控制粒度上:過濾器和攔截器都能夠?qū)崿F(xiàn)對請求的攔截功能,但是在攔截的粒度上有較大的差異,攔截器對訪問控制的粒度更細(xì)。
  • 使用場景上:攔截器往往用于權(quán)限檢查、日志記錄等,過濾器主要用于過濾請求中無效參數(shù),安全校驗(yàn)。
  • 依賴容器上:過濾器依賴于Servlet容器,局限于web,而攔截器依賴于Spring框架,能夠使用Spring框架的資源,不僅限于web。
  • 觸發(fā)時機(jī)上:過濾器在Servlet前后執(zhí)行,攔截器在handler前后執(zhí)行,現(xiàn)在大多數(shù)web應(yīng)用基于Spring,攔截器更細(xì)。

 

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2023-02-20 07:19:14

2021-11-12 06:39:51

Tomcat連接器面試

2024-02-01 08:08:53

Spring過濾器類型Gateway

2022-01-13 10:04:21

攔截器Interceptor過濾器

2023-05-29 07:36:04

Java過濾器攔截器

2024-01-17 08:56:31

2024-09-25 17:44:08

2023-01-26 02:16:17

2020-09-08 06:32:57

項目低耦合高內(nèi)聚

2020-06-04 07:45:07

過濾器和攔截器

2020-12-11 09:20:01

數(shù)據(jù)庫架構(gòu)緩存

2022-09-30 19:32:36

ES面試查詢

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2022-09-23 18:16:25

KafkaJVM

2023-02-17 08:10:24

2024-04-03 15:33:04

JWTSession傳輸信息

2024-09-19 08:42:43

2025-05-12 18:49:52

2024-01-08 08:33:53

AOPSpring攔截器

2021-01-06 10:09:38

MySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

91麻豆精品国产91久久久使用方法| 国产欧美一二三区| 91精品91久久久久久| 成人免费av片| 日本午夜免费一区二区| 一区二区三区四区五区视频在线观看| 古典武侠综合av第一页| 麻豆久久久久久久久久| 国产一区二区在线| 日韩亚洲欧美成人一区| 成人免费aaa| 一级毛片视频在线| 国产高清在线观看免费不卡| 欧美在线一级va免费观看| 午夜精品一区二区三级视频| 欧美变态网站| 3atv在线一区二区三区| 欧美视频第一区| 成人在线视频亚洲| 国产日韩视频一区二区三区| 99在线首页视频| 最新中文字幕在线观看视频| 欧美精品三区| 中文字幕久久久av一区| 波多野结衣影院| 精品国产第一国产综合精品| 在线影视一区二区三区| 福利视频一二区| 国产不卡在线| 国产精品女同一区二区三区| 久久99精品久久久久久久青青日本 | 亚洲网色网站| 亚洲最大在线视频| 美女又爽又黄视频毛茸茸| 日本超碰一区二区| 欧美精品乱码久久久久久按摩| 日本a级片免费观看| 伊人春色在线观看| 亚洲日本va午夜在线影院| 神马影院午夜我不卡| 日韩私人影院| 99精品久久99久久久久| 国产精品乱子乱xxxx| 国产999久久久| 久久 天天综合| 国产精品欧美激情在线播放| 在线永久看片免费的视频| 亚洲巨乳在线| 久久久噜噜噜久久久| 九九视频在线免费观看| 欧美激情一级片一区二区| 久色乳综合思思在线视频| 天天操夜夜操av| 青青草成人影院| 色婷婷av一区二区三区在线观看 | www.综合色| 国产一区二区三区免费看| 国产女同一区二区| 亚洲图片在线播放| 麻豆精品国产91久久久久久| 国产精品美女网站| 一区二区日韩视频| 激情综合色综合久久| 成人免费淫片aa视频免费| 亚洲一级特黄毛片| 国产乱对白刺激视频不卡| 91在线观看免费观看| 精品国自产在线观看| 国产成人在线色| 国产日韩二区| 黄色片视频在线观看| 中文无字幕一区二区三区| 一区二区视频在线免费| 黄色片网站在线| 亚洲欧美日韩电影| 久久这里只有精品23| 小早川怜子影音先锋在线观看| 第一福利永久视频精品| 国产一级不卡毛片| 日本免费成人| 欧美成人欧美edvon| 中文在线永久免费观看| 国产精品一区二区av日韩在线| 在线看欧美日韩| 亚洲人做受高潮| 在线观看日韩av电影| 欧美在线一区二区三区四| 亚洲系列在线观看| 国产a视频精品免费观看| 久久精品国产一区二区三区不卡| yjizz视频网站在线播放| 亚洲欧美国产77777| 国产欧美精品aaaaaa片| 欧美freesex| 91精品国产欧美一区二区| 精品国产一区在线| 99久久精品费精品国产| 97视频在线观看视频免费视频 | 成人精品免费视频| 日本一区二区三区四区在线观看| 久操视频在线免费播放| 精品国产91久久久久久| 男人添女人下面免费视频| 6080成人| 色阁综合伊人av| 国产欧美日韩另类| 国产一区二区三区国产| 欧美lavv| 性欧美1819sex性高清大胸| 91国在线观看| 麻豆精品国产传媒av| 国产精品91一区二区三区| 69av视频在线播放| 午夜精品一二三区| 国产精品久久精品日日| 国产女女做受ⅹxx高潮| 综合视频一区| 久久精品亚洲一区| 欧产日产国产69| av亚洲精华国产精华精华| 伊人情人网综合| 欧美xo影院| 亚洲第一色在线| 中文字幕在线观看成人| 蜜桃视频一区二区三区在线观看| 蜜桃在线一区二区三区精品| 日本高清成人vr专区| 欧美高清你懂得| 亚洲一级理论片| 日韩av一区二区在线影视| 久久99国产精品| 看黄在线观看| 亚洲成人久久网| 久久免费公开视频| 国产成人综合在线| 玖玖精品在线视频| 日本精品久久| 日韩在线观看av| 中文字幕av资源| 欧美激情一区不卡| 欧美日韩在线免费播放| 影视先锋久久| 日本成人黄色片| 黄色视屏网站在线免费观看| 色综合天天综合色综合av| 日韩 中文字幕| 亚洲在线国产日韩欧美| 久久久久久久免费| 欧美成人黑人| 伊人精品在线观看| 在线免费观看高清视频| 国产精品国产三级国产有无不卡 | 国产精品2023| 久久久亚洲国产天美传媒修理工| 丁香花免费高清完整在线播放 | 国产66精品| 久久久久久尹人网香蕉| 免费观看国产精品| 婷婷中文字幕综合| 最近中文字幕免费视频| 青青青伊人色综合久久| 一区二区免费在线观看| 久久99成人| 欧美激情亚洲综合一区| 黄频在线免费观看| 大伊人狠狠躁夜夜躁av一区| 毛片网站免费观看| 久久国产视频网| 日本a级片在线观看| 国产精品chinese在线观看| 91国内免费在线视频| 日韩私人影院| 欧美精品乱码久久久久久| 中文字幕亚洲欧美日韩| 成人动漫精品一区二区| 国产美女三级视频| 天天久久综合| 国产亚洲情侣一区二区无| 欧美国产大片| 久久亚洲一区二区三区四区五区高 | 欧美大片免费高清观看| 日韩中文娱乐网| 丰满人妻熟女aⅴ一区| 色综合亚洲欧洲| 日本一二三区在线观看| aaa亚洲精品一二三区| 国产野外作爱视频播放| 欧美成熟视频| 欧洲一区二区日韩在线视频观看免费 | 久久av老司机精品网站导航| 日韩国产小视频| 国产99亚洲| 亚洲xxx自由成熟| 香蕉伊大人中文在线观看| 久久久久北条麻妃免费看| 天天干天天插天天操| 91成人网在线| 久久香蕉精品视频| 中文字幕av一区 二区| 性猛交╳xxx乱大交| 日韩电影在线免费观看| 欧美中日韩在线| 欧美色网址大全| 国产女人水真多18毛片18精品 | 在线免费看毛片| 日韩福利视频网| 国产精品自拍合集| 久久国产影院| 久久99久久99精品蜜柚传媒| 亚洲精品一区二区在线播放∴| 亚洲 日韩 国产第一| 黄a在线观看| 亚洲图片在区色| 男人天堂一区二区| 69堂国产成人免费视频| 日韩黄色片网站| 偷拍与自拍一区| 乱h高h女3p含苞待放| 国产拍揄自揄精品视频麻豆| 欧美深性狂猛ⅹxxx深喉| 国产精品一区二区视频| 欧美特级aaa| 天堂一区二区在线| 鲁一鲁一鲁一鲁一澡| 欧美久久成人| 色呦呦网站入口| 日韩激情图片| 日韩高清国产精品| 欧美男gay| 欧美亚州在线观看| 亚洲精品进入| 好吊妞www.84com只有这里才有精品| 国产精品一区二区精品| 成人久久精品视频| 亚洲欧美在线综合| 成人激情免费在线| 亚洲成人1区| 成人久久一区二区| 成人av在线播放| 国产欧美精品一区二区| 国产福利91精品一区二区| 国产精品69久久| 久久天堂av| 国产玖玖精品视频| 久久久久久一区二区三区四区别墅| 国产mv免费观看入口亚洲| 五月天国产在线| 日本精品va在线观看| 久九九久频精品短视频| 浅井舞香一区二区| 欧美日韩在线精品一区二区三区激情综合| 国产91精品久| 91看片一区| 国产精品日韩久久久久| 青青在线精品| 亚洲综合色av| 超碰一区二区三区| 精品蜜桃传媒| 欧美另类69xxxxx| 亚洲一区二区三区涩| 香蕉综合视频| 国产免费裸体视频| 国产欧美一级| 九色91popny| 国产综合色产在线精品| 国产a级片视频| 91丨porny丨中文| 免费在线观看a视频| 亚洲欧美在线高清| 久久久久黄色片| 色综合天天狠狠| 曰批又黄又爽免费视频| 日韩一区二区三区免费看 | 正在播放国产一区| 蜜芽在线免费观看| 久久久久久久久久久成人| 一个人看的www视频在线免费观看| 国产ts一区二区| 亚州精品国产| 精品日本一区二区三区| 日韩国产一区二区| 国产日韩av网站| 日本va欧美va欧美va精品| 人妻精品久久久久中文字幕69| av中文字幕在线不卡| 极品尤物一区二区| 亚洲一区二区三区四区五区黄| 人人爽人人爽人人片av| 欧美一区二区私人影院日本| 性高潮久久久久久久久久| 最近2019中文字幕大全第二页| 国产探花视频在线观看| 国产精品激情av电影在线观看| 日韩中文字幕在线一区| 欧美激情论坛| 欧美日韩亚洲一区在线观看| 免费av网址在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 五月天婷婷激情| 日韩一区二区三区在线视频| 嫩草精品影院| 久久久久久国产精品美女| 全球最大av网站久久| 国产一区二区视频在线免费观看| 成人毛片免费看| 午夜免费福利小电影| 国内一区二区视频| 久久午夜福利电影| 亚洲www啪成人一区二区麻豆| 91av久久久| 国产一区二区三区高清在线观看| 天堂成人av| 成人黄色短视频在线观看| 国产一区二区三区电影在线观看 | 日韩在线一卡二卡| 一本一道久久a久久精品 | 日本一区影院| 亚洲欧洲国产精品久久| 久久国产精品久久w女人spa| 亚洲成a人无码| 亚洲天堂精品在线观看| 中文在线观看av| 亚洲美女动态图120秒| av在线播放资源| 97中文在线观看| 91精品亚洲| 亚洲精品在线网址| 中文字幕中文字幕在线一区| 成人小视频在线播放| 日韩精品极品在线观看| 2021天堂中文幕一二区在线观| 亚洲自拍偷拍色图| 91精品国产91久久久久久黑人| 日本xxxx黄色| 国产精品日韩成人| 影音先锋国产资源| 亚洲偷熟乱区亚洲香蕉av| 欧美大片免费高清观看| 日本欧美精品久久久| 久久精选视频| 制服 丝袜 综合 日韩 欧美| 欧美性xxxx极品hd欧美风情| 深夜福利在线看| 午夜精品福利在线观看| 久久97精品| 日本不卡在线观看视频| 久久亚洲私人国产精品va媚药| 毛片视频网站在线观看| 亚洲美女又黄又爽在线观看| 成人小电影网站| 亚洲成色www久久网站| 麻豆91精品视频| 波多野结衣在线网址| 欧美一区二区三区视频在线观看| 黄色网址在线免费播放| 91九色国产社区在线观看| 欧美激情第10页| 麻豆精品国产传媒av| 一本色道亚洲精品aⅴ| 成年人免费在线视频| 成人网欧美在线视频| 欧美在线国产| 中文字幕一区二区久久人妻网站 | 男人天堂999| 中文字幕欧美激情一区| 国产孕妇孕交大片孕| 欧美理论电影在线观看| 国产精品超碰| 久久精品香蕉视频| 国产精品区一区二区三| 国产欧美一级片| 97久久精品视频| 欧美日韩久久精品| 一级淫片在线观看| 香蕉成人啪国产精品视频综合网| 青草久久伊人| 91系列在线播放| 日韩一级精品| 美国一级黄色录像| 精品久久久久久久久久久院品网 | 91精品午夜视频| 黄毛片在线观看| 性欧美精品一区二区三区在线播放| 国产中文字幕一区| 成人在线免费看视频| 日韩中文字幕在线视频播放| 6080亚洲理论片在线观看| 男人天堂成人在线| 亚洲精品视频在线| 男男电影完整版在线观看| 91香蕉国产在线观看| 亚洲日产国产精品| 成人欧美一区二区三区黑人一 | 国产美女在线精品免费观看| 日韩电影在线一区二区| 久久9999久久免费精品国产| 中文字幕成人在线| 天堂网av成人| 四虎成人在线播放| 在线免费视频一区二区|