springboot 攔截器執(zhí)行兩次的解決方案
springboot攔截器執(zhí)行兩次
原因是:
org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error
也是一個controller路徑為/error
@Configuration
public class MVCConfig extends WebMvcConfigurationSupport {
//自定義的攔截器
@Bean
public SecurityInterceptor getSecurityInterceptor() {
return new SecurityInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加攔截器
InterceptorRegistration registration = registry.addInterceptor(getSecurityInterceptor());
//排除的路徑
registration.excludePathPatterns("/login");
registration.excludePathPatterns("/logout");
//將這個controller放行
registration.excludePathPatterns("/error");
//攔截全部
registration.addPathPatterns("/**");
}
}
Springboot攔截器原理
根據(jù)當(dāng)前請求,找到**HandlerExecutionChain**** 【可以處理請求的handler以及handler的所有 攔截器】
先來順序執(zhí)行 所有攔截器的 preHandle方法
如果當(dāng)前攔截器prehandler返回為true。則執(zhí)行下一個攔截器的preHandle
如果當(dāng)前攔截器返回為false。直接 倒序執(zhí)行所有已經(jīng)執(zhí)行了的攔截器的 afterCompletion;
如果任何一個攔截器返回false。直接跳出不執(zhí)行目標(biāo)方法
所有攔截器都返回True。執(zhí)行目標(biāo)方法
倒序執(zhí)行所有攔截器的postHandle方法。
前面的步驟有任何異常都會直接倒序觸發(fā) afterCompletion
頁面成功渲染完成以后,也會倒序觸發(fā) afterCompletion

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決idea中yml文件圖標(biāo)問題及自動提示失效的情況
這篇文章主要介紹了解決idea中yml文件圖標(biāo)問題及自動提示失效的情況,具有很好的價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
詳解基于Mybatis-plus多租戶實(shí)現(xiàn)方案
這篇文章主要介紹了詳解基于Mybatis-plus多租戶實(shí)現(xiàn)方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
動態(tài)修改spring?aop?切面信息提升自動日志輸出框架效率
這篇文章主要為大家介紹了動態(tài)修改spring?aop切面信息提升自動日志輸出框架效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
java構(gòu)造函數(shù)的三種類型總結(jié)
在本篇文章里小編給大家整理了一篇關(guān)于java構(gòu)造函數(shù)的三種類型總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2021-01-01
SpringBoot統(tǒng)一處理功能實(shí)現(xiàn)的全過程
最近在做項目時需要對異常進(jìn)行全局統(tǒng)一處理,主要是一些分類入庫以及記錄日志等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot統(tǒng)一功能處理實(shí)現(xiàn)的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
Java 用Prometheus搭建實(shí)時監(jiān)控系統(tǒng)過程詳解
這篇文章主要介紹了用Prometheus搭建實(shí)時監(jiān)控系統(tǒng)過程詳解之上帝之火,普羅米修斯的崛起,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
可能是全網(wǎng)最詳細(xì)的springboot整合minio教程
MinIO是全球領(lǐng)先的對象存儲先鋒,在標(biāo)準(zhǔn)硬件上,讀/寫速度上高達(dá)183 GB/秒和171 GB/秒,下面這篇文章主要給大家介紹了關(guān)于springboot整合minio的相關(guān)資料,這個教程可能是全網(wǎng)最詳細(xì)的,需要的朋友可以參考下2022-06-06
java 注解實(shí)現(xiàn)一個可配置線程池的方法示例
這篇文章主要介紹了java 注解實(shí)現(xiàn)一個可配置線程池的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01

