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

SpringMVC中的攔截器不生效的問題解決以及衍生出的WebMvcConfigurationSupport繼承問題思考

這篇具有很好參考價值的文章主要介紹了SpringMVC中的攔截器不生效的問題解決以及衍生出的WebMvcConfigurationSupport繼承問題思考。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

SpringMVC中的攔截器不生效的問題解決

過濾器代碼(被Spring掃描并管理):

@Component
public class StuInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("前置過濾器");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("后置過濾器");
    }
}

過濾器配置代碼:

@Configuration
public class MvcSupport implements WebMvcConfigurer {

    @Resource
    private StuInterceptor stuInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        System.out.println(stuInterceptor);
        registry.addInterceptor(stuInterceptor).addPathPatterns("/stu");
    }
}

按理說我們發(fā)出請求localhost/stu之后,應(yīng)該可以看到過濾器的效果,但是失效了。

網(wǎng)上的說法眾說紛紜:

  • 沒加@Component或者@Configuration注解
  • @ComponentScan沒掃描到
  • 路徑配置錯了

以上三種說法一一排除之后,我發(fā)現(xiàn)一個博客提到了:
webmvcconfigurer攔截不起作用,開發(fā)問題,java,spring,servlet

我想到在SpringMVC的配置類上使用了@EnableWebMvc注解,而這個注解相當(dāng)于在容器中引入了DelegatingWebMvcConfiguration類,而這個DelegatingWebMvcConfiguration類是繼承于WebMvcConfigurationSupport的:
webmvcconfigurer攔截不起作用,開發(fā)問題,java,spring,servlet
于是我把@EnableWebMvc這個注解去掉之后再進行嘗試,發(fā)現(xiàn)過濾器生效:
webmvcconfigurer攔截不起作用,開發(fā)問題,java,spring,servlet

WebMvcConfigurationSupport繼承問題思考

首先我們要對下面的五個類有基本的了解:

  • WebMvcConfigurer
  • WebMvcConfigurerAdapter
  • WebMvcConfigurationSupport
  • DelegatingWebMvcConfiguration
  • WebMvcConfigurerComposite

關(guān)系如下:

  • WebMvcConfigurer 接口提供了很多方法讓我們來定制SpringMVC的配置
  • WebMvcConfigurationSupport是一個具體類,其中有很多 @Bean 的方法,注入 SpringMVC 的一些關(guān)鍵組件,方法中會調(diào)用一些空方法,子類只需重寫這些空方法就可以實現(xiàn)定制SpringMVC,而WebMvcConfigurationAdapter則是一個抽象類
  • WebMvcConfigurationSupport、WebMvcConfigurationAdapter都可以實現(xiàn)配置SpringMVC,即都可以配置視圖解析器、攔截器以及靜態(tài)資源等
  • WebMvcConfigurerAdapter 實現(xiàn)了WebMvcConfigurer ,所有方法實現(xiàn)都是空實現(xiàn),且為抽象類,子類只需覆蓋感興趣的方法即可。
  • 在 Spring5.0 開始,WebMvcConfigurer 接口的所有方法都改為了默認方法(基于java8),所以就 不再需要WebMvcConfigurerAdapter類 了,也加上了@Deprecated,子類直接實現(xiàn) WebMvcConfigurer 即可。
  • WebMvcConfigurationSupport 支持的自定義的配置更多更全,WebMvcConfigurerAdapter有的方法,這個類也都有。該類是提供MVC Java config 背后配置的主要類。 通常是通過將@EnableWebMvc添加到應(yīng)用程序的@Configuration類中來導(dǎo)入的。 另一個更高級的選擇是直接從此類擴展并在需要時重寫方法,記住子類要添加@Configuration,重寫帶有@Bean的方法也要加上@Bean。
  • @EnableWebMvc=WebMvcConfigurationSupport,使用了@EnableWebMvc注解等于擴展了WebMvcConfigurationSupport但是沒有重寫任何方法
  • DelegatingWebMvcConfiguration由@EnableWebMvc注解引入,它繼承了WebMvcConfigurationSupport
  • 在DelegatingWebMvcConfiguration 類中,有個 @Autowired 的方法 setConfigurers(List<WebMvcConfigurer> configurers),獲取Spring容器的所有 WebMvcConfigurer 類型的bean,存儲到 WebMvcConfigurerComposite 類型的 configurers 屬性中。然后利用上面的 configurers 屬性重寫 WebMvcConfigurationSupport 中所有的空方法
    webmvcconfigurer攔截不起作用,開發(fā)問題,java,spring,servlet
    webmvcconfigurer攔截不起作用,開發(fā)問題,java,spring,servlet

另外,WebMvcConfigurationSupport(@EnableWebMvc)和@EnableAutoConfiguration這兩種方式都有一些默認的設(shè)定。所以有以下幾種使用方式:

  • @Configuration + @EnableWebMvc + extends WebMvcConfigurer ,在擴展的類中重寫父類的方法即可,但會使springboot的@EnableAutoConfiguration自動配置失效
  • @Configuration + extends WebMvcConfigurationSupport,在擴展的類中重寫父類的方法即可,但會使springboot的@EnableAutoConfiguration自動配置失效
  • @Configuration + extends WebMvcConfigurer ,在擴展的類中重寫父類的方法即可,這種方式依舊使用springboot的@EnableAutoConfiguration中的設(shè)置

WebMvcConfigurationSupport類是徹底自定義配置springmvc,若容器中有該類的子類bean,則springboot的自動配置都會失效,因為WebMvcAutoConfiguration類有 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

如果還是覺得有點迷糊,那么記住以下兩點即可:文章來源地址http://www.zghlxwxcb.cn/news/detail-790306.html

  • 容器中只需要維護一個WebMvcConfigurationSupport即可,多了會失效(最容易出錯的情況就是在使用@EnableWebMvc的情況下,又去繼承WebMvcConfigurationSupport進行配置)。
  • 在使用了@EnableWebMvc的情況下,對springmvc的自定義配置實現(xiàn)WebMvcConfigurer是最穩(wěn)妥的,因為DelegatingWebMvcConfiguration會對所以實現(xiàn)了WebMvcConfigurer的配置類進行收集然后去重寫WebMvcConfigurationSupport中的空方法。

到了這里,關(guān)于SpringMVC中的攔截器不生效的問題解決以及衍生出的WebMvcConfigurationSupport繼承問題思考的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • SpringMVC 攔截器

    SpringMVC 攔截器

    Spring MVC 攔截器是Spring框架中的一種機制,用于在請求到達處理器之前和渲染視圖之前攔截請求,并允許開發(fā)者在這兩個時間點進行自定義的處理邏輯。攔截器與過濾器(Filter)類似,但更加專注于對請求的處理器的攔截,比如對訪問權(quán)限進行控制、日志記錄、性能監(jiān)控等。

    2024年01月19日
    瀏覽(33)
  • SpringMVC:攔截器

    SpringMVC:攔截器

    一般我們會做一些統(tǒng)一的操作這個時候我們需要使用springmvc提供的攔截器,例如token的驗證,字段必填的操作,接口超時判斷,簽名驗證,字段加密等操作,所以我們需要了解執(zhí)行先后順序。?我們來簡單介紹下實現(xiàn)過程及對應(yīng)代碼,執(zhí)行結(jié)果: 1、定義自己的spring mvc攔截器需

    2024年01月24日
    瀏覽(29)
  • SpringMVC攔截器 (Interceptor)

    ????????Spring MVC中的攔截器(Interceptor)類似于Servlet中的過濾器(Filter),它主要用于攔截用戶請求并作相應(yīng)的處理。例如通過攔截器可以進行權(quán)限驗證、判斷用戶是否登錄等。 ????????攔截器依賴于web框架,在實現(xiàn)上基于Java的反射機制,屬于面向切面編程(AOP)的

    2024年01月22日
    瀏覽(34)
  • 12、SpringMVC之?dāng)r截器

    12、SpringMVC之?dāng)r截器

    創(chuàng)建名為spring_mvc_interceptor的新module,過程參考9.1節(jié)和9.5節(jié) 與自定義的過濾器一樣,自定義的攔截器也要配置后才能生效; 過濾器是服務(wù)器中的組件,所以配置到 web.xml 中; 攔截器是 springmvc 中的組件,因此要配置到 springmvc 的配置文件中。 因為在配置攔截器時,沒有指定要

    2024年02月05日
    瀏覽(28)
  • 一文學(xué)會 SpringMVC 攔截器

    一文學(xué)會 SpringMVC 攔截器

    ?作者簡介:2022年 博客新星 第八 。熱愛國學(xué)的Java后端開發(fā)者,修心和技術(shù)同步精進。 ??個人主頁:Java Fans的博客 ??個人信條:不遷怒,不貳過。小知識,大智慧。 ??當(dāng)前專欄:SSM 框架從入門到精通 ?特色專欄:國學(xué)周更-心性養(yǎng)成之路 ??本文內(nèi)容:一文學(xué)會 SpringM

    2024年02月02日
    瀏覽(26)
  • SpringMVC Day 10 : 攔截器

    SpringMVC Day 10 : 攔截器

    攔截器是Spring MVC框架提供的一種強大的機制,用于在請求到達控制器之前或之后進行預(yù)處理和后處理。它可以攔截并處理請求,對請求進行必要的修改或驗證,以及在請求返回給客戶端之前進行額外的操作。攔截器可以幫助我們實現(xiàn)各種需求,如身份驗證、日志記錄、性能監(jiān)

    2024年02月06日
    瀏覽(19)
  • springmvc統(tǒng)一異常處理攔截器

    使用@RestControllerAdvice+@ExceptionHandler實現(xiàn) 也可以使用@ControllerAdvice+@ResponseBody+@ExceptionHandler實現(xiàn) 創(chuàng)建一個異常處理的類,放在config包下 ?組件類: ?也可以讓不同的異常返回不同的結(jié)果,捕獲什么異常由@ExceptionHandler的value屬性決定,傳入一個類對象(可以通過反射獲得) ?

    2024年02月15日
    瀏覽(24)
  • SpringMVC的攔截器(Interceptor)

    SpringMVC的攔截器(Interceptor)

    對于攔截器這節(jié)的知識,我們需要學(xué)習(xí)如下內(nèi)容: 攔截器概念 入門案例 攔截器參數(shù) 攔截器工作流程分析 講解攔截器的概念之前,我們先看一張圖: (1)瀏覽器發(fā)送一個請求會先到Tomcat的web服務(wù)器 (2)Tomcat服務(wù)器接收到請求以后,會去判斷請求的是靜態(tài)資源還是動態(tài)資源 (3)如果是

    2024年02月09日
    瀏覽(30)
  • SpringMVC中攔截器的簡單使用

    步驟一:創(chuàng)建攔截器類 首先,我們需要創(chuàng)建一個攔截器類,該類需要實現(xiàn) HandlerInterceptor 接口。這個接口定義了三個方法,分別在請求處理前、請求處理后和視圖渲染后執(zhí)行。 步驟二:創(chuàng)建配置類 上述配置類使用了 @Configuration 注解,表示這是一個配置類。通過 @Bean 注解將

    2024年01月17日
    瀏覽(21)
  • SpringMVC攔截器和異常處理機制

    SpringMVC攔截器和異常處理機制

    SpringMVC攔截器類似于過濾器,用于進行預(yù)處理和后處理 將攔截器按照一定順序連接成一條鏈,就是攔截器鏈 創(chuàng)建攔截器類實現(xiàn)HandlerInterceptor接口 配置攔截器 測試攔截器的攔截效果 三個方法的執(zhí)行:在配置文件中依次配置兩個攔截器分別為1和2,則執(zhí)行順序是:1的 preHandle

    2024年02月16日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包