日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

徹底明白Filter與Interceptor

來源: 責(zé)編: 時間:2024-05-16 17:42:34 172觀看
導(dǎo)讀Filter(過濾器)概述Servlet規(guī)范中定義的一種組件,用于在請求進(jìn)入Servlet之前或響應(yīng)返回客戶端之前執(zhí)行一些操作。它依賴于Servlet容器,幾乎可以對任何請求進(jìn)行過濾,隨著Web應(yīng)用的啟動而啟動,Web應(yīng)用停止則Filter銷毀。工作

Filter(過濾器)

概述

Servlet規(guī)范中定義的一種組件,用于在請求進(jìn)入Servlet之前或響應(yīng)返回客戶端之前執(zhí)行一些操作。它依賴于Servlet容器,幾乎可以對任何請求進(jìn)行過濾,隨著Web應(yīng)用的啟動而啟動,Web應(yīng)用停止則Filter銷毀。LWi28資訊網(wǎng)——每日最新資訊28at.com

工作原理

通過實現(xiàn)javax.servlet.Filter,對請求進(jìn)行過濾攔截,進(jìn)而做統(tǒng)一處理。最后將請求交給Servlet進(jìn)行處理并生成得到響應(yīng)。得到響應(yīng)以后,F(xiàn)ilter可以對響應(yīng)再次進(jìn)行處理。LWi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片LWi28資訊網(wǎng)——每日最新資訊28at.com

應(yīng)用場景

如進(jìn)行過濾低俗文字,危險字符,日志記錄、權(quán)限驗證、字符編碼處理等等。如防XSS攻擊的XSSFilter過濾器。LWi28資訊網(wǎng)——每日最新資訊28at.com

代碼實現(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í)行的操作        // 可以對請求進(jìn)行修改、驗證等操作        chain.doFilter(request, response);        // 在響應(yīng)返回客戶端之前執(zhí)行的操作        // 可以對響應(yīng)進(jìn)行修改、記錄日志等操作    }    @Override    public void destroy() {        // 銷毀操作    }}

注冊Filter

在Spring Boot中,我們可以通過配置類或使用@WebFilter注解來注冊Filter。LWi28資訊網(wǎng)——每日最新資訊28at.com

@Configurationpublic 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í)行前后進(jìn)行處理。與Filter不同,Interceptor是Spring MVC框架特有的組件。它可以將一些共有的行為動作給通用化、標(biāo)準(zhǔn)化,進(jìn)而讓代碼更加簡潔,可擴(kuò)展性更高。LWi28資訊網(wǎng)——每日最新資訊28at.com

原理

圖片圖片LWi28資訊網(wǎng)——每日最新資訊28at.com

基于實現(xiàn)HandlerInterceptor接口,并重寫它的方法。它有如下方法:LWi28資訊網(wǎng)——每日最新資訊28at.com

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

應(yīng)用場景

Interceptor主要用于處理與Controller相關(guān)的邏輯,比如權(quán)限驗證、日志記錄、統(tǒng)一異常處理等。LWi28資訊網(wǎng)——每日最新資訊28at.com

代碼實現(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;@Configurationpublic 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í)行時機(jī)不同

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

范圍

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

使用場景

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

本文鏈接:http://www.www897cc.com/showinfo-26-88563-0.html徹底明白Filter與Interceptor

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C#委托:實現(xiàn)靈活的方法調(diào)用

下一篇: 還是結(jié)構(gòu)體指針寫的代碼看著舒服

標(biāo)簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 承德市| 平湖市| 尤溪县| 苏尼特右旗| 闽清县| 西丰县| 辽宁省| 南汇区| 绍兴市| 措美县| 临桂县| 当阳市| 长丰县| 玉田县| 清水河县| 汉中市| 白银市| 三明市| 大竹县| 保德县| 溆浦县| 巩留县| 太仆寺旗| 芦山县| 江安县| 彭阳县| 阳原县| 宝应县| 鸡东县| 蓬莱市| 泉州市| 绥中县| 怀远县| 拜城县| 富平县| 天峨县| 定南县| 南涧| 合川市| 大丰市| 西盟|