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

Java中的過濾器和攔截器有什么區別么?

開發 前端
我們自定義一個獲取并返回某個靜態資源的內容以及整個請求所花費的時間攔截器,一般這個還是比較有用的,而且還可以加一個請求訪問的,然后來處理方法執行時間的。

今天我們不談框架,我們來說說這個 Java 基礎中的過濾器和攔截器,為什么要談呢?其實就有粉絲會問了不起,這個過濾器和攔截器他們有什么區別呢?為什么面試官在面試的時候經常會問到這個過濾器和攔截器的區別,以及他們分別對應的應用場景呢?

今天了不起就來說說這個過濾器和攔截器。

過濾器

過濾器 Filter

什么是過濾器

過濾器是 Servlet 的高級特性之一,是實現 Filter 接口的 Java 類。其基本功能就是對 servlet 的調用進行干預,在 Servlet 請求和響應的過程中增加一些特定的功能。可以使用過濾器實現的功能有:統一編碼,URL級別的權限訪問控制,過濾敏感詞匯,壓縮請求信息.

我們來通過代碼來看 Filter 的執行過程

public interface Filter {
    //用于執行過濾器的初始化工作,web容器會在web項目啟動時自動調用該方法
    default void init(FilterConfig filterConfig) throws ServletException {
    }
 
    //當請求和響應被過濾器攔截后,都會交給doFilter來處理:其中兩個參數分別是被攔截request和response對象,可以使用chain的doFliter方法來放行
    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
    //用于釋放關閉Filter對象打開的資源,在web項目關閉時,由web容器自動調用該方法
    default void destroy() {
    }
}

在 Filter 中我們可以看到有三個方法,分別是

  • init
  • doFilter
  • destroy

至于每個方法的作用,了不起已經把他們的功能寫在了注釋上面,他們實際上就是三個步驟:

1.初始化

2.處理請求和相應過濾,完成操作

3.最后釋放資源

而實現一個自定義 Filter 也是比較簡單的,我們來實現一個簡單的自定義的 Filter。

@Component
@Slf4j
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("初始化過濾器:" + filterConfig.getFilterName());
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        // 對請求進行過濾操作處理
        log.info("MyFilter 開始對請求進去過濾操作!");
        String requestURI = httpRequest.getRequestURI();
        log.info("請求地址:" + requestURI);

        // 繼續執行下一個 Filter,如果沒有其他 Filter 的話就執行 Controller 層代碼
        long startTime = System.currentTimeMillis();
        chain.doFilter(request, response);

        // 執行完用戶請求后,回到這里對 response 響應內容做一些處理
        long endTime = System.currentTimeMillis();
        log.info("請求處理完畢,所花費時間為:" + (endTime - startTime) + "ms");
    }

    @Override
    public void destroy() {
        log.info("銷毀過濾器 MyFilter");
    }

}

至于 Filter 的配置的話,了不起都不用解釋,現在幾乎沒有再去配置 xml 的方式了,都是配置類或者注解的方式。

注解方式:

@WebFilter(filterName = "myFilter",urlPatterns = {"/*"})

配置類方式:

@Configuration
public class MyFilterConfig {
 
    @Bean
    public FilterRegistrationBean myFilter(){
        FilterRegistrationBean fb = new FilterRegistrationBean();
        //設置filter啟動順序
        fb.setOrder(1);
        fb.setFilter(new MyFilter());
        fb.addInitParameter("phone","183****5510");
        //設置攔截請求規則,這里攔截所有請求
        fb.addUrlPatterns("/*");
        return fb;
    }
}

我們看完了這個過濾器,接下來就得看看這個攔截器了。

攔截器

攔截器 Interceptor

什么是攔截器

Spring MVC 中的攔截器Interceptor類似于 ServLet 中的過濾器Filter,它主要用于攔截用戶請求并作出相應的處理。例如通過攔截器可以進行權限驗證、記錄請求信息的日志、判斷用戶是否登錄等。

老規矩,直接看源代碼

public interface HandlerInterceptor {
    //預處理方法,本方法在控制器方法(MyController的方法)之前執        行,用戶的請求最先到達此方法,在這個方法中可以獲取請求的信息,驗證請求是否符合要求。以驗證用戶是否登錄,驗證用戶是否有權限訪問某個鏈接地址(url)。如果返回true則放行,返回false則攔截
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }
    //后處理方法。在controller中的方法之后執行的。能夠獲取到處理器方法的返回值 mv,可以修改mv中的數據和視圖。可以影響到最后的執行結果。主要是對原來的執行結果做二次修正
    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }
    //最后執行的方法,在頁面渲染之后執行。在請求處理完成后執行的,框架中規定是當你的視圖處理完成后,對視圖進行了forword。就任務請求處理完成。
    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

其實也是三個步驟:

1.預處理

2.后處理

3.最后執行

至于每一步的含義和內容,了不起同樣的再注釋中表明了。

同樣的,自定義實現一個攔截器也很簡單:

public class MyInterceptor implements HandlerInterceptor {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyInterceptor.class);

    private static final ThreadLocal<Long> START_THREAD_LOCAL = new ThreadLocal<>();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        String uri = request.getRequestURI();
        LOGGER.info(uri + " preHandle");
        Long startTime = System.currentTimeMillis();    //獲取開始時間
        START_THREAD_LOCAL.set(startTime);  //線程綁定變量(該數據只有當前請求的線程可見)
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        String uri = request.getRequestURI();
        LOGGER.info(uri + " postHandle");
        Long startTime = START_THREAD_LOCAL.get();//得到線程綁定的局部變量(開始時間)
        Long endTime = System.currentTimeMillis();  //2、結束時間
        Long time = endTime - startTime;
        LOGGER.info("http request all time: " + time + "ms");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                Exception ex) throws Exception {
        String uri = request.getRequestURI();
        LOGGER.info(uri + " afterCompletion");
        if (START_THREAD_LOCAL != null) {
            START_THREAD_LOCAL.remove();    // 移除ThreadLocal中的局部變量
        }
    }
}

我們自定義一個獲取并返回某個靜態資源的內容以及整個請求所花費的時間攔截器,一般這個還是比較有用的,而且還可以加一個請求訪問的,然后來處理方法執行時間的。

配置攔截器其實在項目中是非常的常見。

@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {
 
    /**
     * 配置攔截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(myInterceptor())
                .addPathPatterns("/api/v1/**")//需要攔截的請求
                .addPathPatterns("/api/v1/**")//需要攔截的請求
                .excludePathPatterns("/api/debug/**")//不攔截的請求
                .excludePathPatterns("api/page/getName");//不攔截的請求
    }
 
    /**
     * 注入攔截器到spring容器
     * @return
     */
    @Bean
    public MyInterceptor myInterceptor(){
        return new MyInterceptor();
    }
}

我們看完了過濾器和攔截器的實現,接下來就得來看看這個過濾器和攔截器之間的區別了。

1.依賴點不同

  • 過濾器依賴與servlet容器,而攔截器不依賴與servlet容器
  • 過濾器屬于Servlet,而攔截器屬于springmvc

2.實現原理不同

  • 過濾器是基于函數回調,而攔截器是基于java的反射機制的

3.作用域不同

  • 過濾器則可以對幾乎所有的請求起作用,而攔截器只能對action請求起作用

4.生命周期不同

  • 在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次

這是區別,其實二者的相同點也是有的,比如,攔截器和過濾器實際上都是 Spring 中 AOP 的體現,都能實現一些權限和日志方面的功能。

你知道他們是什么區別了么?

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2023-02-20 07:19:14

2022-01-13 10:04:21

攔截器Interceptor過濾器

2023-09-15 11:26:16

2020-09-14 12:46:25

過濾器攔截器Filter

2024-01-17 08:56:31

2024-01-08 08:33:53

AOPSpring攔截器

2016-12-07 09:56:13

JavaFilter過濾器

2020-06-04 07:45:07

過濾器和攔截器

2022-08-31 08:33:54

Bash操作系統Linux

2009-07-08 15:30:56

Servlet過濾器

2025-05-12 18:49:52

2024-01-05 09:04:35

隆過濾器數據結構哈希函數

2024-11-04 08:45:48

布隆過濾器元數據指紋值

2021-09-03 06:33:24

布隆過濾器高并發

2020-07-20 09:18:43

存儲數據技術

2025-04-27 08:15:00

FlinkSavepointCheckpoint

2020-08-02 23:20:36

JavaScriptmap()forEach()

2022-09-02 09:02:44

TypeInterface

2021-03-27 10:56:17

promisethenfinally

2021-07-05 15:22:03

Servlet過濾器客戶端
點贊
收藏

51CTO技術棧公眾號

中文字幕一精品亚洲无线一区| 日本精品600av| 国产成人免费9x9x人网站视频| 欧美日韩在线观看视频小说| 亚洲图片激情小说| 国产91久久婷婷一区二区| 一区二区三区人妻| 欧美成人精品网站| 51社区在线成人免费视频| 欧美国产激情二区三区| 456亚洲影院| 五月天丁香社区| av免费在线观| 国内精品伊人久久久久av影院| 精品亚洲一区二区三区| 久久手机在线视频| 国产又黄又猛又爽| 日韩激情免费| 在线观看91视频| 欧美精品v日韩精品v国产精品| 日产电影一区二区三区| 午夜日韩影院| 一区二区三区日韩精品| 91亚洲精品久久久| 欧美国产日韩在线观看成人| 91精品麻豆| 亚洲三级在线免费观看| 精品欧美一区二区三区久久久| 国产精品成人aaaa在线| 97视频一区| 亚洲成人动漫在线观看| 国严精品久久久久久亚洲影视| 亚洲天堂aaa| 婷婷中文字幕一区| 在线观看91av| 成人黄色片免费| 精品女同一区二区三区| 欧美激情日韩| 欧美精品一区二区三区很污很色的| 无码日本精品xxxxxxxxx| av中文字幕在线| 青青草原综合久久大伊人精品优势 | 欧美日韩国产首页在线观看| 先锋在线资源一区二区三区| 国产精品久久久久久免费免熟| 噜噜爱69成人精品| 国产亚洲精品高潮| 男生操女生视频在线观看| 国产日产一区二区| 成人av免费在线观看| 97久久精品人搡人人玩| 少妇精品一区二区三区| 国产精品美女午夜爽爽| 亚洲伦理在线精品| 精品一区久久久| 丰满人妻av一区二区三区| 日韩视频精品在线观看| 一区二区三区四区视频| 亚洲天堂av一区二区三区| 久久五月精品中文字幕| 久久综合色8888| 成人精品aaaa网站| 日韩黄色在线视频| 亚洲国产第一| 中文综合在线观看| 女人裸体性做爰全过| 亚洲精品aⅴ| 日韩小视频在线观看专区| 少妇无码av无码专区在线观看 | 中文字幕久久亚洲| 亚洲一区二区自偷自拍| 美女精品视频在线| 色综合久久久久久久久久久| 91制片厂免费观看| 色猫av在线| 国产乱码精品一区二区三| 欧美一级大片视频| 亚洲黄色免费观看| 国内一区二区三区| 伊人久久久久久久久久久久久| 黄色三级生活片| 免费看久久久| 91精品国产乱码久久蜜臀| av网址在线观看免费| 亚洲精品白浆| 第一福利永久视频精品| 免费极品av一视觉盛宴| 成av人片在线观看www| 亚洲摸摸操操av| 精品少妇在线视频| 中文字幕在线观看播放| 亚洲国产日韩一区二区| 欧美性猛交xxx乱久交| 欧美办公室脚交xxxx| 亚洲精品写真福利| 一卡二卡三卡视频| bestiality新另类大全| 国产精品萝li| 青娱乐国产91| 日韩一二三四| 中文字幕一区二区三区精华液| 欧美亚洲丝袜| 国产超级va在线视频| 婷婷开心激情综合| 日本www在线视频| 免费电影网站在线视频观看福利| 欧美日韩美女在线观看| 精品久久久99| 亚洲国产精品嫩草影院久久av| 日韩欧美国产精品一区| 日韩a一级欧美一级| 精品三级在线观看视频| 亚洲电影天堂av| www.四虎在线| 日韩精品不卡一区二区| 97精品久久久中文字幕免费| 亚洲一级在线播放| 久久奇米777| 欧美黑人在线观看| 99精品国产九九国产精品| 国产视频在线一区二区| 国产在线观看你懂的| 久久国产精品区| 91精品久久久久久久久久久| 一级黄色小视频| 久久精品国产久精国产爱| 国产美女精彩久久| 91肉色超薄丝袜脚交一区二区| 99国产精品视频免费观看| 久久久久国产精品视频| 第九色区av在线| 一区免费观看视频| 国产成人一区二区三区别| 久久天堂影院| 国产亚洲精品日韩| 极品国产91在线网站| 日韩成人精品在线观看| 国产这里只有精品| 国内三级在线观看| 亚洲视频香蕉人妖| 国产原创精品在线| 日韩欧美中文在线观看| 久久国内精品一国内精品| 久热这里只有精品在线| 翔田千里一区二区| 成人高清视频观看www| 国产免费视频在线| 欧美亚洲国产怡红院影院| 日本网站在线看| 国产精品91一区二区三区| 国产精品视频yy9099| 国产福利第一视频| av不卡在线观看| 亚洲人成77777| 欧美一卡二卡| 欧美大片一区二区三区| 久久久久成人精品无码| 国产999精品久久| 日韩精品久久久| 久久五月精品中文字幕| 精品处破学生在线二十三| 日本熟妇成熟毛茸茸| kk眼镜猥琐国模调教系列一区二区| 国产视频在线观看网站| 精品网站aaa| 日韩免费在线播放| 香蕉视频网站在线观看| 欧美性猛交xxxx偷拍洗澡| caoporm在线视频| 丝袜美腿一区二区三区动态图| 欧美成年人视频| 波多野结衣黄色| 白白色亚洲国产精品| 内射国产内射夫妻免费频道| 国产99精品一区| 97在线视频国产| 免费人成黄页在线观看忧物| 亚洲一区在线电影| 中文字幕日韩综合| 欧美午夜一区| 91在线网站视频| 成年人在线观看| 在线播放中文一区| 亚洲精品成人无码| 亚洲日本黄色| 日韩欧美亚洲日产国| 亚洲电影二区| 中国人与牲禽动交精品| av男人天堂av| 色综合天天天天做夜夜夜夜做| 麻豆一区在线观看| 日本不卡中文字幕| 精品嫩模一区二区三区| 精品国产乱码一区二区三区| 992tv在线成人免费观看| 亚洲欧美另类综合| 在线亚洲人成电影网站色www| 国模无码国产精品视频| 久久99国产精品久久99果冻传媒| 国产精品国三级国产av| 国产一区二区三区四区五区传媒 | 国产一区二区精品在线观看| 五月天亚洲综合小说网| 亚洲精品黑牛一区二区三区| 国产精品久久久久免费a∨| 黄色羞羞视频在线观看| 欧美sm极限捆绑bd| 久久久久久久国产精品毛片| 国产欧美一区二区三区在线看蜜臀 | 东方伊人免费在线观看| 丁香激情综合国产| 欧美精品自拍视频| 91亚洲成人| 亚洲一区二区三区乱码aⅴ蜜桃女| 无遮挡在线观看| 亚洲色图色老头| 最新中文字幕免费| 午夜精品久久久久久久久久 | 99精品中文字幕在线不卡| 欧美又大又粗又长| 不卡av免费观看| 久久亚洲综合国产精品99麻豆精品福利 | av黄色一级片| 午夜宅男久久久| 免费极品av一视觉盛宴| 忘忧草精品久久久久久久高清| 欧美日韩国产高清视频| 精品福利网址导航| 成人av中文| 国产福利片在线观看| 欧美成人亚洲成人日韩成人| 欧美人xxx| 精品欧美一区二区久久| 国产精品爽爽久久| 欧美日韩一区二区三区在线| www.超碰在线观看| 国产精品成人一区二区艾草| 国产sm调教视频| 久久久久久久久久久久久夜| 国产三级精品三级在线| 免费高清在线视频一区·| 300部国产真实乱| 欧美激情偷拍| 男人天堂新网址| 欧美天堂亚洲电影院在线观看 | 在线视频国产区| 美日韩在线视频| 欧美性猛片xxxxx免费中国| 欧美老少配视频| 青青青草原在线| 国产视频自拍一区| 精彩国产在线| 中文字幕免费精品一区高清| 91欧美在线视频| 亚洲白虎美女被爆操| 深爱激情五月婷婷| 欧美日韩国产区一| 亚洲天堂男人网| 欧美日韩1区2区| www五月婷婷| 亚洲国产成人精品久久| 欧美性孕妇孕交| 在线精品国产成人综合| 最新97超碰在线| 久久中文久久字幕| 国产美女一区视频| 日韩av电影在线免费播放| 国精品产品一区| 99视频在线| 欧美日韩一区二区三区四区不卡| 欧美lavv| 麻豆一二三区精品蜜桃| 国产精品一区二区三区精品| **国产精品| 国产二区一区| 久久99精品久久久野外观看| www.久久草| 少妇精品久久久| a级网站在线观看| 欧美电影免费| 国产在线视频综合| 米奇777在线欧美播放| 手机av在线免费| 成人av高清在线| 在线观看亚洲大片短视频| 亚洲综合在线观看视频| 色哟哟一一国产精品| 日本一区二区久久| 国产三级国产精品国产国在线观看| 亚洲成av人在线观看| 人妻中文字幕一区二区三区| 日韩欧美亚洲一区二区| 精品推荐蜜桃传媒| 欧美成人精品在线视频| 唐人社导航福利精品| 欧美主播福利视频| 蜜桃视频m3u8在线观看| 91精品久久久久久久久久久久久久 | 免费一级片91| 手机免费看av片| 国产成人av一区二区三区在线| 法国伦理少妇愉情| 亚洲日本欧美天堂| 久久久久久无码精品大片| 欧美成人一级视频| 日本中文字幕视频在线| 人体精品一二三区| 2021年精品国产福利在线| 一本一本a久久| 久久久久中文| 国模私拍在线观看| 一区二区三区中文字幕| 伊人网免费视频| 欧美精品在线观看播放| 色视频在线观看| 韩国欧美亚洲国产| 欧美久久亚洲| 一区二区国产日产| 日韩综合小视频| 精品人妻一区二区三区视频| 亚洲一区二区三区四区五区中文 | 精品国产露脸精彩对白| 久久久久久国产精品免费无遮挡| 国产精品av在线| 欧美日韩免费电影| 欧美婷婷久久| 久久xxxx精品视频| 亚洲永久无码7777kkk| 欧美—级在线免费片| 天堂网一区二区三区| 在线亚洲一区观看| 欧美在线观看在线观看| 51精品在线观看| 欧美18xxxx| 日本午夜激情视频| 不卡的av电影| 日本熟女一区二区| 亚洲黄页视频免费观看| 大乳在线免费观看| 日韩av电影免费观看高清| 尤物tv在线精品| 激情婷婷综合网| 国产日韩欧美精品电影三级在线| 肉色超薄丝袜脚交69xx图片 | 亚洲高清在线免费观看| 久久久九九九九| 波多野结衣电影在线播放| 一色桃子一区二区| 视频91a欧美| 8x8x华人在线| 成人av免费观看| 精品不卡一区二区| 一区国产精品视频| 亚洲国产伊人| 成人在线免费观看视频网站| 国产麻豆视频精品| 久久免费精彩视频| 日韩大陆欧美高清视频区| 天堂资源在线中文| 亚洲一区二区中文字幕| 国产一区久久| 亚洲一区二区三区无码久久| 日韩美女精品在线| 国产视频在线免费观看| 亚洲欧美日韩直播| 怡红院av在线| 狠狠色噜噜狠狠色综合久| 亚洲综合不卡| 91无套直看片红桃在线观看| 日韩一二三四区| 这里有精品可以观看| 日韩福利一区二区三区| 国产一区视频在线看| 日韩av女优在线观看| 亚洲性线免费观看视频成熟| 只有精品亚洲| 黄色www网站| 欧美激情资源网| 亚洲av无码乱码国产麻豆| 中文字幕最新精品| 99这里只有精品视频| www.亚洲天堂网| 99热99精品| 亚洲精品国产精品国自产网站按摩| 久久视频在线看| 日韩精品欧美大片| 中文字幕第一页在线视频| 五月天一区二区三区| 婷婷五月在线视频| 国产亚洲情侣一区二区无| 欧美精品一线| 亚洲精品成人无码| 精品精品国产高清一毛片一天堂| 欧美男体视频| 免费的一级黄色片| 国产人久久人人人人爽| 国产18精品乱码免费看| 国产精品久久久久久一区二区| 在线观看的日韩av| 91porn在线|