国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

詳解過濾器Filter和攔截器Interceptor的區(qū)別和聯(lián)系

這篇具有很好參考價(jià)值的文章主要介紹了詳解過濾器Filter和攔截器Interceptor的區(qū)別和聯(lián)系。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

前言

區(qū)別

聯(lián)系


前言

  • 過濾器(Filter)和攔截器(Interceptor)都是用于在Web應(yīng)用程序中處理請(qǐng)求和響應(yīng)的組件,但它們?cè)趯?shí)現(xiàn)方式和功能上有一些區(qū)別。

區(qū)別

  • 1. 實(shí)現(xiàn)方式:

- 過濾器是基于Servlet規(guī)范的組件,通過實(shí)現(xiàn)javax.servlet.Filter接口來定義。過濾器可以在請(qǐng)求被處理之前和響應(yīng)被發(fā)送到客戶端之前進(jìn)行操作。
- 攔截器是基于Java的反射機(jī)制,通過實(shí)現(xiàn)HandlerInterceptor接口來定義。攔截器可以在請(qǐng)求被處理之前、處理過程中和響應(yīng)被發(fā)送到客戶端之前進(jìn)行操作。????????????????

  • 詳解過濾器Filter和攔截器Interceptor的區(qū)別和聯(lián)系,Java Web學(xué)習(xí)跟蹤筆記,Filter,Interceptor,過濾器,攔截器,SpringBoot,Servlet
  • 詳解過濾器Filter和攔截器Interceptor的區(qū)別和聯(lián)系,Java Web學(xué)習(xí)跟蹤筆記,Filter,Interceptor,過濾器,攔截器,SpringBoot,Servlet
  • 2. 執(zhí)行順序:??

- 過濾器在Servlet容器中的執(zhí)行順序是由部署描述符(web.xml)中的配置順序決定的,它們按照配置的順序依次執(zhí)行。
- 攔截器在Spring MVC框架中的執(zhí)行順序是由配置文件中的攔截器順序決定的,它們按照配置的順序依次執(zhí)行。

具體參照文章:登錄校驗(yàn)-Interceptor-詳解_熵240的博客-CSDN博客

  • 3. 功能:

- 過濾器可以對(duì)請(qǐng)求進(jìn)行預(yù)處理和后處理,例如修改請(qǐng)求參數(shù)、編碼轉(zhuǎn)換、請(qǐng)求攔截等。過濾器可以對(duì)所有的請(qǐng)求進(jìn)行統(tǒng)一的處理。
- 攔截器可以對(duì)請(qǐng)求進(jìn)行更加細(xì)粒度的控制和處理,例如權(quán)限驗(yàn)證、日志記錄、性能監(jiān)控等。攔截器可以根據(jù)具體的請(qǐng)求路徑、請(qǐng)求方法、請(qǐng)求參數(shù)等進(jìn)行處理。

  • 4. 作用范圍:

- 過濾器是在Servlet容器中工作的,可以對(duì)所有的請(qǐng)求進(jìn)行過濾處理,包括靜態(tài)資源請(qǐng)求和動(dòng)態(tài)請(qǐng)求。
- 攔截器是在Spring MVC框架中工作的,只能對(duì)控制器(Controller)處理的請(qǐng)求進(jìn)行攔截處理。

  • 5. 放行條件不一樣

-過濾器(Filter)放行方式是執(zhí)行doFilter()方法實(shí)現(xiàn)的

package com.example.tlias.Filter;

import com.alibaba.fastjson.JSONObject;
import com.example.tlias.pojo.Result;
import com.example.tlias.utils.JwtUtils;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import java.io.IOException;

@Slf4j
//@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        // 1.獲取請(qǐng)求URL地址
        String url = request.getRequestURI().toString();
        log.info("獲取到的URL地址為:{}", url);

        // 2.判斷URL是否含有l(wèi)ogin路徑,如果含有,則為登陸操作,放行
        if (url.contains("login")) {
            log.info("此請(qǐng)求為登陸操作,放行.......");
            filterChain.doFilter(request, response);
            return; //  todo 跳出過濾器
        }
        // todo 以下是對(duì)于不是登錄操作的過濾
        // 3.獲取請(qǐng)求頭中的令牌(token)
        String token = request.getHeader("token");

        // 4.判斷是否存在,如果不存在,返回錯(cuò)誤結(jié)果(未登錄)
        if (!StringUtils.hasLength(token)) {
            log.info("請(qǐng)求頭token為空,返回為登錄的信息");
            Result error = Result.error("NOT_LOGIN"); // 返回的錯(cuò)誤信息通過接口文檔與前端統(tǒng)一
            // todo 手動(dòng)轉(zhuǎn)換 將對(duì)象-->json格式數(shù)據(jù)===》可以使用阿里巴巴fastJson的工具包,在pom.xml配置文件中添加相關(guān)依賴
            // todo 控制類返回的對(duì)象會(huì)自動(dòng)轉(zhuǎn)換為JSON格式的字符串?dāng)?shù)據(jù)
            String noLogin = JSONObject.toJSONString(error);
            // 將數(shù)據(jù)寫入響應(yīng)對(duì)象
            response.getWriter().write(noLogin);
            return; // todo 跳出過濾器
        }

        // 5.解析token,如果解析失敗,返回錯(cuò)誤結(jié)果(未登錄)
        try {
            JwtUtils.parseJWT(token);  // todo 如果解析失敗方法就會(huì)報(bào)錯(cuò)
        } catch (Exception e) {  // token解析失敗
            e.printStackTrace();
            log.info("解析令牌失敗,返回未登錄的錯(cuò)誤信息");
            Result error = Result.error("NOT_LOGIN");
            String noLogin = JSONObject.toJSONString(error);
            response.getWriter().write(noLogin);
            return;
        }
        // 6.放行
        log.info("令牌合法,放行");
        filterChain.doFilter(request, response);
    }
}

?-攔截器(Interceptor)放行的方法是在preHandle()種返回true值

package com.example.tlias.Interceptor;

import com.alibaba.fastjson.JSONObject;
import com.example.tlias.pojo.Result;
import com.example.tlias.utils.JwtUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component // 將該類標(biāo)記為組件交給IOC容器管理
@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {
    @Override  // todo 在目標(biāo)資源方法(控制類中的方法)執(zhí)行之前執(zhí)行,返回true:放行;返回false:不放行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        // 1.獲取請(qǐng)求URL地址
        String url = request.getRequestURI().toString();
        log.info("獲取到的URL地址為:{}", url);

        // 2.判斷URL是否含有l(wèi)ogin路徑,如果含有,則為登陸操作,放行
        if (url.contains("login")) {
            log.info("此請(qǐng)求為登陸操作,放行.......");
            return true; //  todo 跳出攔截器
        }
        // todo 以下是對(duì)于不是登錄操作的過濾
        // 3.獲取請(qǐng)求頭中的令牌(token)
        String token = request.getHeader("token");

        // 4.判斷是否存在,如果不存在,返回錯(cuò)誤結(jié)果(未登錄)
        if (!StringUtils.hasLength(token)) {
            log.info("請(qǐng)求頭token為空,返回為登錄的信息");
            Result error = Result.error("NOT_LOGIN"); // 返回的錯(cuò)誤信息通過接口文檔與前端統(tǒng)一
            // todo 手動(dòng)轉(zhuǎn)換 將對(duì)象-->json格式數(shù)據(jù)===》可以使用阿里巴巴fastJson的工具包,在pom.xml配置文件中添加相關(guān)依賴
            // todo 控制類返回的對(duì)象會(huì)自動(dòng)轉(zhuǎn)換為JSON格式的字符串?dāng)?shù)據(jù)
            String noLogin = JSONObject.toJSONString(error);
            // 將數(shù)據(jù)寫入響應(yīng)對(duì)象
            response.getWriter().write(noLogin);
            return false; // todo 跳出過濾器
        }

        // 5.解析token,如果解析失敗,返回錯(cuò)誤結(jié)果(未登錄)
        try {
            JwtUtils.parseJWT(token);  // todo 如果解析失敗方法就會(huì)報(bào)錯(cuò)
        } catch (Exception e) {  // token解析失敗
            e.printStackTrace();
            log.info("解析令牌失敗,返回未登錄的錯(cuò)誤信息");
            Result error = Result.error("NOT_LOGIN");
            String noLogin = JSONObject.toJSONString(error);
            response.getWriter().write(noLogin);
            return false;
        }
        // 6.放行
        log.info("令牌合法,放行");
        return true;
    }

    @Override // todo 在目標(biāo)資源方法執(zhí)行之后執(zhí)行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle()方法運(yùn)行了");
    }

    @Override // todo 在視圖渲染完畢后執(zhí)行,最后執(zhí)行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion()發(fā)運(yùn)行了");
    }
}

?詳解過濾器Filter和攔截器Interceptor的區(qū)別和聯(lián)系,Java Web學(xué)習(xí)跟蹤筆記,Filter,Interceptor,過濾器,攔截器,SpringBoot,Servlet文章來源地址http://www.zghlxwxcb.cn/news/detail-679002.html

聯(lián)系

  • 過濾器和攔截器都可以用于對(duì)請(qǐng)求進(jìn)行處理,但它們的實(shí)現(xiàn)方式和功能不同。
  • 過濾器是基于Servlet規(guī)范的組件,可以對(duì)所有的請(qǐng)求進(jìn)行統(tǒng)一的處理;攔截器是基于Spring MVC框架的組件,只能對(duì)控制器處理的請(qǐng)求進(jìn)行處理。
  • 過濾器和攔截器都可以用于對(duì)請(qǐng)求進(jìn)行預(yù)處理和后處理,但攔截器可以提供更加細(xì)粒度的控制和處理。
  • 過濾器和攔截器都可以在請(qǐng)求被處理之前和響應(yīng)被發(fā)送到客戶端之前進(jìn)行操作,但它們的執(zhí)行順序不同。

到了這里,關(guān)于詳解過濾器Filter和攔截器Interceptor的區(qū)別和聯(lián)系的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 過濾器和攔截器的辨析

    過濾器和攔截器都是為了在請(qǐng)求到達(dá)目標(biāo)處理器(Servlet或Controller)之前或者之后插入自定義的處理邏輯 過濾器 : 遵循AOP(面向切面編程)思想實(shí)現(xiàn),基于Servlet規(guī)范提供的Filter接口,它是位于客戶端請(qǐng)求與服務(wù)器響應(yīng)之間的一個(gè)組件,依賴于Servlet容器。當(dāng)請(qǐng)求到達(dá)服務(wù)器時(shí),過濾器

    2024年03月11日
    瀏覽(21)
  • 【SpringBoot篇】Interceptor攔截器 | 攔截器和過濾器的區(qū)別

    【SpringBoot篇】Interceptor攔截器 | 攔截器和過濾器的區(qū)別

    攔截器(Interceptor)是一種軟件設(shè)計(jì)模式,用于在應(yīng)用程序處理請(qǐng)求或響應(yīng)時(shí)對(duì)其進(jìn)行攔截和修改。攔截器可以在整個(gè)應(yīng)用程序中使用,用于執(zhí)行跨越多個(gè)層的通用任務(wù),如身份驗(yàn)證、授權(quán)、緩存、日志記錄、性能計(jì)量等。 在Web開發(fā)中,攔截器通常用于在請(qǐng)求到達(dá)控制器之前

    2024年02月04日
    瀏覽(28)
  • JAVA中的攔截器、過濾器

    JAVA中的攔截器、過濾器

    相關(guān)解釋:攔截器依賴于頁面有訪問controller的操作,且屬于SpringMVC體系的動(dòng)態(tài)攔截調(diào)用機(jī)制,是java中AOP思想的運(yùn)用。 來看看源碼作者的注釋: 其中倒數(shù)第二段話,描述其類似于過濾器,但其特點(diǎn)只允許使用自定義預(yù)處理,不能處理程序本身。此處可體現(xiàn)AOP思想。 過濾器是

    2024年02月13日
    瀏覽(19)
  • 過濾器,監(jiān)聽器與攔截器的區(qū)別

    過濾器,監(jiān)聽器與攔截器的區(qū)別

    ? 過濾器和監(jiān)聽器不是Spring MVC中的組件,而是Servlet的組件,由Servlet容器來管理。攔截器是Spring MVC中的組件,由Spring容器來管理 ? Servlet過濾器與Spring MVC 攔截器在Web應(yīng)用中所處的層次如下圖所示: 過濾器是Servlet的高級(jí)特性之一,是實(shí)現(xiàn)Filter接口的Java類。其基本功能就是對(duì)

    2024年02月14日
    瀏覽(53)
  • 【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹

    【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹

    通過兩幅圖我們可以理解攔截器和過濾器的特點(diǎn) 1、過濾器 過濾器是在請(qǐng)求進(jìn)入tomcat容器后,但請(qǐng)求進(jìn)入servlet之前進(jìn)行預(yù)處理的。請(qǐng)求結(jié)束返回也是,是在servlet處理完后,返回給前端之前。 理解上面這句話我們就可以知道,進(jìn)入servlet之前,主要是兩個(gè)參數(shù):ServletRequest,

    2024年02月04日
    瀏覽(28)
  • spring boot 過濾器&攔截器與aop

    spring boot 過濾器&攔截器與aop

    在使用 Spring 框架時(shí),可以通過在 web.xml 配置文件中注冊(cè)過濾器,使其在請(qǐng)求進(jìn)入 Spring 前就能夠進(jìn)行預(yù)處理。這樣可以在請(qǐng)求進(jìn)入 Spring MVC 的 DispatcherServlet 之前,對(duì)請(qǐng)求進(jìn)行攔截、修改或者過濾。 過濾器在 Spring 中的應(yīng)用場(chǎng)景包括但不限于: 字符編碼過濾:通過過濾器,在

    2024年02月01日
    瀏覽(23)
  • Springboot中使用攔截器、過濾器、監(jiān)聽器

    Springboot中使用攔截器、過濾器、監(jiān)聽器

    Javaweb三大組件:servlet、Filter(過濾器)、?Listener(監(jiān)聽器) SpringBoot特有組件:Interceptor(攔截器) 過濾器、攔截器、監(jiān)聽器、AOP(后續(xù)文章介紹)、全局異常處理器(后續(xù)文章介紹)是搭建系統(tǒng)框架時(shí),經(jīng)常用到的部分,全局異常處理器的作用很明顯,就是處理接口執(zhí)行

    2024年02月03日
    瀏覽(25)
  • Spring Boot攔截器與過濾器的區(qū)別

    Spring Boot攔截器與過濾器的區(qū)別

    在使用Spring Boot開發(fā)Web應(yīng)用程序時(shí),您可能需要在處理請(qǐng)求之前或之后執(zhí)行某些操作。這些操作可以包括身份驗(yàn)證、日志記錄、性能監(jiān)測(cè)等。在這種情況下,您可以使用兩種不同的機(jī)制:攔截器和過濾器。本文將介紹這兩種機(jī)制及其區(qū)別,并提供一些示例代碼來演示如何在S

    2024年02月08日
    瀏覽(23)
  • 登錄頁面jwt密鑰,過濾器,攔截器,異常處理

    需求: 用戶未登錄時(shí),訪問其他也沒面,操作添加、刪除等操作時(shí),強(qiáng)行跳轉(zhuǎn)至登錄頁面。 實(shí)現(xiàn)方法: 1.使用Cookie,登錄后后端添加一個(gè)cookie,每次頁面判斷是否有cookie, 2。使用session,原理同上,只不過session是存儲(chǔ)在服務(wù)器里的,cookie是在瀏覽器里。 3。使用jwt令牌,登

    2023年04月25日
    瀏覽(26)
  • springbboot攔截器,過濾器,監(jiān)聽器及執(zhí)行流程

    springbboot攔截器,過濾器,監(jiān)聽器及執(zhí)行流程

    過濾器是在請(qǐng)求進(jìn)入容器后,但請(qǐng)求進(jìn)入servlet之前進(jìn)行預(yù)處理的。請(qǐng)求結(jié)束返回也是,是在servlet處理完后,返回給前端之前 請(qǐng)求按照上圖進(jìn)入conteoller后執(zhí)行完再返回 過濾器是Servlet規(guī)范中定義的一種組件,可以用于在請(qǐng)求進(jìn)入Web應(yīng)用程序之前或響應(yīng)離開Web應(yīng)用程序之前對(duì)請(qǐng)

    2024年02月13日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包