欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot項(xiàng)目整合攔截器詳解

 更新時(shí)間:2023年10月21日 11:06:41   作者:浪浪山的猿  
這篇文章主要介紹了SpringBoot項(xiàng)目整合攔截器詳解,java里的攔截器是動(dòng)態(tài)攔截Action調(diào)用的對象,它提供了一種機(jī)制可以使開發(fā)者在一個(gè)Action執(zhí)行的前后執(zhí)行一段代碼,攔截器用于在某個(gè)方法或者字段被訪問之前進(jìn)行攔截,然后再之前或者之后加入某些操作,需要的朋友可以參考下

什么是攔截器

java里的攔截器是動(dòng)態(tài)攔截Action調(diào)用的對象,它提供了一種機(jī)制可以使開發(fā)者在一個(gè)Action執(zhí)行的前后執(zhí)行一段代碼,也可以在一個(gè)Action執(zhí)行前阻止其執(zhí)行,同時(shí)也提供了一種可以提取Action中可重用部分代碼的方式。

在AOP中,攔截器用于在某個(gè)方法或者字段被訪問之前進(jìn)行攔截,然后再之前或者之后加入某些操作。

攔截器的應(yīng)用場景

  • 日志記錄:可以記錄請求信息的日志,以便進(jìn)行信息監(jiān)控、信息統(tǒng)計(jì)等。
  • 權(quán)限檢查:如登陸檢測,進(jìn)入處理器檢測是否登陸,如果沒有直接返回到登陸頁面。
  • 性能監(jiān)控:典型的是慢日志。

攔截器的使用

自定義攔截器的步驟:

  • 自定義攔截器類并實(shí)現(xiàn)HandlerInterceptor接口
/**
 * @author gf
 * @date 2023/2/6
 */
@Component
public class Intercepter1 implements HandlerInterceptor {
    @Override
    //在將請求發(fā)送到控制器controller之前執(zhí)行操作,若返回true就進(jìn)入控制器,若返回false就不進(jìn)入控制器了
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("token");
        System.out.println("自定義攔截器1-----攔截到的token值為:"+token);
        return null != token;
    }
 
    @Override
    //用于在將響應(yīng)發(fā)送到客戶端之前執(zhí)行操作,就是控制器執(zhí)行完之后返回?cái)?shù)據(jù)時(shí)執(zhí)行。
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("自定義攔截器1-----控制器執(zhí)行完畢,返回?cái)?shù)據(jù)");
    }
 
    @Override
    //在完成請求和響應(yīng)后執(zhí)行操作
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("自定義攔截器1-----響應(yīng)結(jié)束");
    }
 
}

自定義攔截器類,通過實(shí)現(xiàn)HandlerInterceptor接口并重寫他的三個(gè)方法,preHandle、postHandle、afterCompletion,實(shí)現(xiàn)攔截控制。

  • preHandle:在將請求發(fā)送到控制器controller之前執(zhí)行操作,若返回true就進(jìn)入控制器,若返回false就不進(jìn)入控制器了。
  • postHandle:用于在將響應(yīng)發(fā)送到客戶端之前執(zhí)行操作,就是控制器執(zhí)行完之后返回?cái)?shù)據(jù)時(shí)執(zhí)行。
  • afterCompletion:在完成請求和響應(yīng)后執(zhí)行操作。

注冊自定義攔截器

攔截器的注冊是通過重寫WebMvcConfigurer接口的addInterceptors方法實(shí)現(xiàn)的,老版本的WebMvcConfigurerAdapter使用時(shí)發(fā)現(xiàn)已經(jīng)被淘汰了,不推薦使用了。

/**
 * @author gf
 * @date 2023/2/6
 */
@Configuration
public class InterceptConfig implements WebMvcConfigurer {
 
 
    //引入自定義攔截器對象
    @Resource
    private Intercepter1 Intercepter1;
 
 
    //重寫addInterceptors方法注冊攔截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
 
        //addPathPatterns方法添加攔截路徑匹配規(guī)則("/**"是攔截所有),excludePathPatterns方法是設(shè)置白名單,放行哪些路
        registry.addInterceptor(Intercepter1).addPathPatterns("/**").excludePathPatterns("/test/*").order(1);
    }
}

測試效果

編寫測試類

    @GetMapping("/test")
    public BaseResponse<String> sayHello(@RequestParam("name") String name){
        if(!name.equals("老王")){
            throw new BaseException(BaseErrorEnum.USER_NOT_EXIST);
        }
        else{
            return RespGenerator.success("調(diào)用成功");
        }
    }

測試先不傳token

可以看到不傳token時(shí),preHandle方法返回false,不在執(zhí)行后面的方法

測試傳token

可以看到傳遞token后,攔截器放行,執(zhí)行了后面的方法,

攔截器的優(yōu)先級

我們重新再增加兩個(gè)攔截器

設(shè)置Order的值

請求接口,查看攔截器的執(zhí)行順序

對于order的順序:攔截器的preHandle方法是根據(jù)order的大小從小到大順序執(zhí)行,postHandle和afterCompletion方法是根據(jù)order的大小從小到大倒敘執(zhí)行。

攔截器和過濾器的區(qū)別

攔截器是spring在基于反射機(jī)制實(shí)現(xiàn)的,過濾器是基于servlet的回調(diào)實(shí)現(xiàn)的;

攔截器可以獲取IOC容器中的各個(gè)bean,而過濾器就不行,這點(diǎn)很重要,在攔截器里注入一個(gè)service,可以調(diào)用業(yè)務(wù)邏輯

深度不同:過濾器只在Servlet前后起作用,而攔截器可以深入到方法前后,異常拋出前后等,相比較過濾器具有更大的彈性。

到此這篇關(guān)于SpringBoot項(xiàng)目整合攔截器詳解的文章就介紹到這了,更多相關(guān)SpringBoot整合攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入聊一聊springboot項(xiàng)目全局異常處理那些事兒

    深入聊一聊springboot項(xiàng)目全局異常處理那些事兒

    最近在做項(xiàng)目時(shí)需要對異常進(jìn)行全局統(tǒng)一處理,所以下面這篇文章主要給大家介紹了關(guān)于springboot項(xiàng)目全局異常處理那些事兒,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • SpringBoot實(shí)現(xiàn)excel生成并且通過郵件發(fā)送的步驟詳解

    SpringBoot實(shí)現(xiàn)excel生成并且通過郵件發(fā)送的步驟詳解

    實(shí)際開發(fā)中,特別是在B端產(chǎn)品的開發(fā)中,我們經(jīng)常會(huì)遇到導(dǎo)出excel的功能,更進(jìn)階一點(diǎn)的需要我們定期生成統(tǒng)計(jì)報(bào)表,然后通過郵箱發(fā)送給指定的人員,?今天要帶大家來實(shí)現(xiàn)的就是excel生成并通過郵件發(fā)送,需要的朋友可以參考下
    2023-10-10
  • 了解java中的Clojure如何抽象并發(fā)性和共享狀態(tài)

    了解java中的Clojure如何抽象并發(fā)性和共享狀態(tài)

    Clojure是一種運(yùn)行在Java平臺上的 Lisp 方言,Lisp是一種以表達(dá)性和功能強(qiáng)大著稱的編程語言,但人們通常認(rèn)為它不太適合應(yīng)用于一般情況,而Clojure的出現(xiàn)徹底改變了這一現(xiàn)狀。,需要的朋友可以參考下
    2019-06-06
  • IDEA類存在但找不到的解決辦法

    IDEA類存在但找不到的解決辦法

    本文主要介紹了IDEA類存在但找不到的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法

    Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法

    這篇文章主要介紹了Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法,涉及Java數(shù)學(xué)運(yùn)算計(jì)算隨機(jī)數(shù)及字符串操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • 淺談幾種Java自定義異常處理方式

    淺談幾種Java自定義異常處理方式

    在Java中,異常是一種常見的處理機(jī)制,本文主要介紹了淺談幾種Java自定義異常處理方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 基于Java實(shí)現(xiàn)圖形驗(yàn)證碼工具類

    基于Java實(shí)現(xiàn)圖形驗(yàn)證碼工具類

    這篇文章主要為大家詳細(xì)介紹了如何基于Java實(shí)現(xiàn)圖形驗(yàn)證碼工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Java中常用隊(duì)列的使用解讀

    Java中常用隊(duì)列的使用解讀

    這篇文章主要介紹了Java中常用隊(duì)列的使用,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • spring-boot中的SPI機(jī)制實(shí)例講解

    spring-boot中的SPI機(jī)制實(shí)例講解

    這篇文章主要介紹了spring-boot中的SPI機(jī)制實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java完美實(shí)現(xiàn)2048小游戲

    Java完美實(shí)現(xiàn)2048小游戲

    本文給大家分享的是一則根據(jù)網(wǎng)友的代碼改編的2048小游戲的源碼,個(gè)人認(rèn)為已經(jīng)非常完美了,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03

最新評論