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

Spring一步到位精通攔截器

 更新時間:2023年01月16日 09:52:31   作者:不死鳥.亞歷山大.狼崽子  
攔截器(Interceptor)是一種動態(tài)攔截方法調(diào)用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細講講SpringMVC中攔截器的概念及入門案例,感興趣的可以嘗試一下

1 攔截器

攔截器是Spring中的概念,和過濾器類似,可以對用戶請求進行攔截過濾處理。但是相對于過濾器而言,攔截器要的控制更加的細節(jié),攔截器可以在三個地方進行執(zhí)行:

  • 可以在請求達到Controller控制器之前,通過攔截器執(zhí)行一段代碼
  • 也可以在控制器執(zhí)行之后,通過攔截器執(zhí)行一段代碼,此時只是Controller執(zhí)行完畢視圖還沒有開始渲染
  • 最后在整個請求結(jié)束的時候還可以通過攔截器執(zhí)行一段代碼

使用攔截器的方法

  • 創(chuàng)建支持它的@Component類,它應該實現(xiàn)HandlerInterceptor接口
  • 實現(xiàn)WebMVCConfigure配置器,注冊到spring容器中,添加攔截路徑和放行路徑

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

攔截器(Interceptor)類似于Servlet中的過濾器( Filter),它主要用于攔截用戶請求并做相應的處理。

  • 過濾器只能在容器初始化時被調(diào)用異常,在action的生命周期中,而攔截器可以多次被調(diào)用。
  • 過濾器可以對幾乎所有的請求起作用,攔截器只能對action請求起作用。
  • 過濾器不能訪問action上下文、堆棧里的對象,而攔截器可以訪問。
  • 過濾器是基于函數(shù)回調(diào),而攔截器不依賴與servlet容器。
  • 過濾器不能獲取IOC容器中的各個bean,而攔截器可以,這點很重要,在攔截器里注入一個service,可以調(diào)用業(yè)務邏輯

攔截器是在DispatcherServlet這個servlet中執(zhí)行的,因此所有的請求最先進入Filter,最后離開Filter。其順序如下。

Filter->Interceptor.preHandle->Handler->Interceptor.postHandle->Interceptor.afterCompletion->Filter

2 實現(xiàn)流程

2.1 引入依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

2.2 自定義攔截器

package com.example.demo.Interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class EasyLogControllerInterceptor implements HandlerInterceptor {
    /**
     * 在controller調(diào)用之前執(zhí)行
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println(request.getRequestURI()+"開始執(zhí)行");
        return true;
    }
    /**
     * 在controller調(diào)用中執(zhí)行
     */
    public void postHandle(
            HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception {
        System.out.println(request.getRequestURI()+"執(zhí)行中");
    }
    /**
     * 在controller調(diào)用后執(zhí)行
     */
    public void afterCompletion(
            HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println(request.getRequestURI()+"執(zhí)行結(jié)束");
     }
}

2.3 注入適配器

package com.example.demo.Interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class IntercepterConfig implements WebMvcConfigurer {
    @Autowired
    private EasyLogControllerInterceptor easyLogControllerInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //addPathPatterns用于添加攔截路徑
        //excludePathPatterns用于添加不攔截的路徑
        registry.addInterceptor(easyLogControllerInterceptor).addPathPatterns("/hello");
    }
    //此方法用于配置靜態(tài)資源路徑
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/my/");
    }
}

執(zhí)行結(jié)果如下:

訪問hello接口時,會進入攔截器,其他的接口不會進入。

3 控制器驗證

多個攔截器順序

  • 多個攔截器的執(zhí)行順序和注冊的順序有關(guān),先注冊的先執(zhí)行
  • 可以通過Order方法來設(shè)置執(zhí)行順序,值越小越先執(zhí)行

到此這篇關(guān)于Spring一步到位精通攔截器的文章就介紹到這了,更多相關(guān)Spring攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Mybatis模板(已優(yōu)化)適合小白

    詳解Mybatis模板(已優(yōu)化)適合小白

    這篇文章主要介紹了Mybatis模板(已優(yōu)化)適合小白,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java實現(xiàn)簡單棋盤存檔和讀取功能

    Java實現(xiàn)簡單棋盤存檔和讀取功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單棋盤存檔和讀取功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Java異步編程之Callbacks與Futures模型詳解

    Java異步編程之Callbacks與Futures模型詳解

    這篇文章主要為大家詳細介紹了Java異步編程中Callbacks與Futures模型的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-03-03
  • Java多線程(單例模式,堵塞隊列,定時器)詳解

    Java多線程(單例模式,堵塞隊列,定時器)詳解

    這篇文章主要介紹了java多線程的(單例模式,堵塞隊列,定時器),具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-08-08
  • 詳解JAVA設(shè)計模式之適配器模式

    詳解JAVA設(shè)計模式之適配器模式

    這篇文章主要介紹了JAVA設(shè)計模式之適配器模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解
    2020-06-06
  • javaweb如何使用華為云短信通知公共類調(diào)用

    javaweb如何使用華為云短信通知公共類調(diào)用

    這篇文章主要介紹了javaweb使用華為云短信通知公共類調(diào)用的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 基于線程、并發(fā)的基本概念(詳解)

    基于線程、并發(fā)的基本概念(詳解)

    下面小編就為大家?guī)硪黄诰€程、并發(fā)的基本概念(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 解決idea spring boot 修改html等不重啟即時生效的問題

    解決idea spring boot 修改html等不重啟即時生效的問題

    這篇文章主要介紹了解決idea spring boot 修改html等不重啟即時生效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java設(shè)計模式之中介者模式

    Java設(shè)計模式之中介者模式

    這篇文章介紹了Java設(shè)計模式之中介者模式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Java的常用包

    Java的常用包

    本文主要對Java的常用包進行一一介紹。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01

最新評論