成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

徹底明白Filter與Interceptor

開發(fā) 前端
通過實現(xiàn)javax.servlet.Filter,對請求進行過濾攔截,進而做統(tǒng)一處理。最后將請求交給Servlet進行處理并生成得到響應。得到響應以后,F(xiàn)ilter可以對響應再次進行處理。

Filter(過濾器)

概述

Servlet規(guī)范中定義的一種組件,用于在請求進入Servlet之前或響應返回客戶端之前執(zhí)行一些操作。它依賴于Servlet容器,幾乎可以對任何請求進行過濾,隨著Web應用的啟動而啟動,Web應用停止則Filter銷毀。

工作原理

通過實現(xiàn)javax.servlet.Filter,對請求進行過濾攔截,進而做統(tǒng)一處理。最后將請求交給Servlet進行處理并生成得到響應。得到響應以后,F(xiàn)ilter可以對響應再次進行處理。

圖片圖片

應用場景

如進行過濾低俗文字,危險字符,日志記錄、權(quán)限驗證、字符編碼處理等等。如防XSS攻擊的XSSFilter過濾器。

代碼實現(xiàn)(SpringBoot舉例)

創(chuàng)建Filter類

public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化操作
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 在請求處理之前執(zhí)行的操作
        // 可以對請求進行修改、驗證等操作
        chain.doFilter(request, response);
        // 在響應返回客戶端之前執(zhí)行的操作
        // 可以對響應進行修改、記錄日志等操作
    }
    @Override
    public void destroy() {
        // 銷毀操作
    }
}

注冊Filter

在Spring Boot中,我們可以通過配置類或使用@WebFilter注解來注冊Filter。

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean<MyFilter> myFilter() {
        FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new MyFilter());
        registrationBean.addUrlPatterns("/api/*"); // 設(shè)置過濾的路徑
        return registrationBean;
    }
}

Interceptor 攔截器介紹

概述

Interceptor是Spring框架提供的一種攔截器,與Servlet無關(guān),它依賴于Web框架,用于在Controller方法執(zhí)行前后進行處理。與Filter不同,Interceptor是Spring MVC框架特有的組件。它可以將一些共有的行為動作給通用化、標準化,進而讓代碼更加簡潔,可擴展性更高。

原理

圖片圖片

基于實現(xiàn)HandlerInterceptor接口,并重寫它的方法。它有如下方法:

  • preHandle方法:目標資源方法執(zhí)行前執(zhí)行。返回true則繼續(xù)往下執(zhí)行 返回false則進行攔截。
  • postHandle方法:目標資源方法執(zhí)行后執(zhí)行
  • afterCompletion方法:視圖渲染完畢后執(zhí)行,最后執(zhí)行。

應用場景

Interceptor主要用于處理與Controller相關(guān)的邏輯,比如權(quán)限驗證、日志記錄、統(tǒng)一異常處理等。

代碼實現(xiàn)

創(chuàng)建Interceptor類

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 在Controller方法執(zhí)行前執(zhí)行的操作
        // 返回true表示繼續(xù)執(zhí)行,返回false表示中斷執(zhí)行
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        // 在Controller方法執(zhí)行后、視圖渲染前執(zhí)行的操作
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                Exception ex) throws Exception {
        // 在整個請求完成后執(zhí)行的操作
    }
}

注冊Interceptor

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/api/**") // 設(shè)置攔截的路徑
                .excludePathPatterns("/api/public/**"); // 設(shè)置排除的路徑
    }
}

Filter與Interceptor的區(qū)別及如何選擇

執(zhí)行時機不同

  • Filter:在請求進入Servlet之前和響應返回客戶端之前執(zhí)行。
  • Interceptor:在Controller方法執(zhí)行前、執(zhí)行后、視圖渲染前以及整個請求完成后執(zhí)行。

范圍

  • Filter:作用于整個Web應用,不僅限于Spring MVC。
  • Interceptor:僅作用于Spring MVC中的Controller層。

使用場景

  • Filter:適用于通用的請求處理邏輯,比如字符編碼、日志記錄等。
  • Interceptor:適用于與Controller相關(guān)的業(yè)務(wù)邏輯,比如權(quán)限驗證、統(tǒng)一異常處理等。
責任編輯:武曉燕 來源: 程序員無名
相關(guān)推薦

2024-12-06 10:43:27

2023-12-27 08:16:54

Sessiontoken安全性

2020-12-08 08:14:11

SQL注入數(shù)據(jù)庫

2024-05-13 10:45:25

中介模式面向?qū)ο?/a>數(shù)量

2009-06-16 11:44:00

Java IO系統(tǒng)

2024-05-10 08:43:04

外觀模式接口系統(tǒng)

2024-05-09 09:09:19

組合模式對象

2022-02-28 09:44:09

Linux硬鏈接軟鏈接

2019-08-27 14:46:59

ElasticSearES數(shù)據(jù)庫

2024-02-26 00:00:00

Redis持久化AOF

2019-08-21 08:24:34

技術(shù)過濾器代碼

2023-04-26 01:17:16

惡意注冊Java驗證

2024-05-11 14:18:44

迭代器模式業(yè)務(wù)

2023-05-29 08:45:45

Java注解數(shù)據(jù)形式

2020-10-26 07:02:11

ConcurrentH存儲

2024-05-17 10:08:59

享元模式分類方式

2020-09-29 06:44:28

Redis延時隊列

2024-05-15 17:41:37

備忘錄模式多線程

2017-06-07 18:40:33

PromiseJavascript前端

2022-01-13 10:04:21

攔截器Interceptor過濾器
點贊
收藏

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

主站蜘蛛池模板: 一本综合久久 | 国产不卡一区 | 国产视频久久 | 超碰在线97国产 | 97人澡人人添人人爽欧美 | 玖玖免费| 国产精彩视频 | 午夜在线 | 一区二区在线免费播放 | 国产精品乱码一区二区三区 | 在线精品亚洲欧美日韩国产 | 国产精品毛片一区二区在线看 | 亚洲视频欧美视频 | 日韩中文字幕视频在线观看 | 欧美日韩一区二区电影 | 中国一级大毛片 | 性在线 | 亚洲欧美一区二区三区国产精品 | 国产成人精品一区二区三区在线 | 日本不卡一区二区 | 欧美性生活网 | 中文字幕一区二区三区不卡在线 | 中文字幕91av | 国产一区二区三区视频免费观看 | 成人看片在线观看 | 日韩av在线一区 | 久久中文视频 | 欧美黄a | 五月天综合影院 | 99精品免费久久久久久日本 | 国产视频在线观看一区二区三区 | 91精品国产综合久久婷婷香蕉 | 秋霞av国产精品一区 | 久久综合狠狠综合久久综合88 | 日韩精品成人一区二区三区视频 | 国产精品视频一区二区三区不卡 | 国产精品爱久久久久久久 | 精品视频在线观看 | 国产精品一区二区三区久久久 | 国产精品久久久久久久久久久久久 | 久热精品在线观看视频 |