最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring一步到位精通攔截器

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

1 攔截器

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

  • 可以在請(qǐng)求達(dá)到Controller控制器之前,通過(guò)攔截器執(zhí)行一段代碼
  • 也可以在控制器執(zhí)行之后,通過(guò)攔截器執(zhí)行一段代碼,此時(shí)只是Controller執(zhí)行完畢視圖還沒(méi)有開(kāi)始渲染
  • 最后在整個(gè)請(qǐng)求結(jié)束的時(shí)候還可以通過(guò)攔截器執(zhí)行一段代碼

使用攔截器的方法

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

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

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

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

攔截器是在DispatcherServlet這個(gè)servlet中執(zhí)行的,因此所有的請(qǐng)求最先進(jìn)入Filter,最后離開(kāi)Filter。其順序如下。

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

2 實(shí)現(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()+"開(kāi)始執(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é)果如下:

訪問(wèn)hello接口時(shí),會(huì)進(jìn)入攔截器,其他的接口不會(huì)進(jìn)入。

3 控制器驗(yàn)證

多個(gè)攔截器順序

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

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

相關(guān)文章

  • Spring Boot如何集成模板引擎FreeMarker

    Spring Boot如何集成模板引擎FreeMarker

    這篇文章主要介紹了Spring Boot如何集成模板引擎FreeMarker,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • MyBatisPlus深入探究映射匹配的兼容性

    MyBatisPlus深入探究映射匹配的兼容性

    在最近的工作中,碰到一個(gè)比較復(fù)雜的返回結(jié)果,發(fā)現(xiàn)簡(jiǎn)單映射已經(jīng)解決不了這個(gè)問(wèn)題了,只好去求助百度,學(xué)習(xí)mybatis映射匹配應(yīng)該怎么寫,將學(xué)習(xí)筆記結(jié)合工作碰到的問(wèn)題寫下本文,供自身查漏補(bǔ)缺,同時(shí)已被不時(shí)之需
    2022-08-08
  • Java雜談之重復(fù)代碼是什么

    Java雜談之重復(fù)代碼是什么

    剛開(kāi)始工作時(shí),總有人開(kāi)玩笑說(shuō),編程實(shí)際上就是 CV,調(diào)侃很多程序員寫程序依靠的是復(fù)制粘貼。至今,很多初級(jí)甚至高級(jí)程序員寫代碼依舊是CV,就是把其他項(xiàng)目里的一段代碼復(fù)制過(guò)來(lái),稍加改動(dòng),然后,跑一下沒(méi)有大問(wèn)題就完事。這就是在給其他人挖坑
    2021-09-09
  • java 設(shè)計(jì)模型之單例模式詳解

    java 設(shè)計(jì)模型之單例模式詳解

    本文主要介紹了java 單例模式,單例對(duì)象(Singleton)是一種常用的設(shè)計(jì)模式。在Java應(yīng)用中,單例對(duì)象能保證在一個(gè)JVM中,該對(duì)象只有一個(gè)實(shí)例存在,希望能幫助有需要的同學(xué)
    2016-07-07
  • SpringBoot 3.0 新特性內(nèi)置聲明式HTTP客戶端實(shí)例詳解

    SpringBoot 3.0 新特性內(nèi)置聲明式HTTP客戶端實(shí)例詳解

    聲明式 http 客戶端主旨是使得編寫 java http 客戶端更容易,為了貫徹這個(gè)理念,采用了通過(guò)處理注解來(lái)自動(dòng)生成請(qǐng)求的方式,本文給大家詳解介紹SpringBoot 聲明式HTTP客戶端相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • Java使用Thread和Runnable的線程實(shí)現(xiàn)方法比較

    Java使用Thread和Runnable的線程實(shí)現(xiàn)方法比較

    這篇文章主要介紹了Java使用Thread和Runnable的線程實(shí)現(xiàn)方法,結(jié)合實(shí)例形式對(duì)比分析了Java使用Thread和Runnable實(shí)現(xiàn)與使用線程的相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • 源碼解析JDK 1.8 中的 Map.merge()

    源碼解析JDK 1.8 中的 Map.merge()

    這篇文章主要介紹了JDK 1.8 之 Map.merge()的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java String類型對(duì)象轉(zhuǎn)換為自定義類型對(duì)象的實(shí)現(xiàn)

    java String類型對(duì)象轉(zhuǎn)換為自定義類型對(duì)象的實(shí)現(xiàn)

    本文主要介紹了java String類型對(duì)象轉(zhuǎn)換為自定義類型對(duì)象的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • springboot?實(shí)戰(zhàn):異常與重定向問(wèn)題

    springboot?實(shí)戰(zhàn):異常與重定向問(wèn)題

    這篇文章主要介紹了springboot實(shí)戰(zhàn):異常與重定向問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 如何在SpringBoot中使用logback優(yōu)化異常堆棧的輸出詳解

    如何在SpringBoot中使用logback優(yōu)化異常堆棧的輸出詳解

    最近項(xiàng)目中整合了logback,所以下面這篇文章主要給大家介紹了關(guān)于如何在SpringBoot中使用logback優(yōu)化異常堆棧的輸出,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05

最新評(píng)論

肥乡县| 深水埗区| 伽师县| 奉节县| 开江县| 深圳市| 忻州市| 桂林市| 周至县| 麻栗坡县| 安乡县| 大庆市| 湟中县| 万荣县| 宜昌市| 尼木县| 河北省| 娱乐| 马尔康县| 界首市| 邳州市| 东兰县| 永定县| 德清县| 砚山县| 射阳县| 黄大仙区| 武穴市| 什邡市| 开平市| 博湖县| 泰兴市| 三穗县| 菏泽市| 达尔| 曲靖市| 农安县| 商城县| 阳江市| 张家港市| 九龙城区|