基于springboot攔截器HandlerInterceptor的注入問題
springboot攔截器HandlerInterceptor的注入
一、問題描述
項目啟動后,攔截器下的注入為null,影響攔截器的邏輯操作。如下圖:
二、解決策略
原因: 攔截器加載是在springcontext創(chuàng)建之前完成,詳情可以看spring的攔截器加載過程及IOC的關系
解決方案一:使用@Bean在攔截器初始化之前讓類加載,重點在于@Bean的攔截器處理及getCheckFilter()的引入
具體如下:
// 攔截器處理 public class CheckFilter implements HandlerInterceptor { @Autowired private SystemService systemService; } // 配置類處理 @Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { @Bean public CheckFilter getCheckFilter(){ return new CheckFilter(); } @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(getCheckFilter()).addPathPatterns("/**"). excludePathPatterns("/admin/auth/**"); super.addInterceptors(registry); } @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); super.addResourceHandlers(registry); } @Override protected void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/",".jsp"); super.configureViewResolvers(registry); } }
解決方案二:給攔截器增加配置注解如:@Configuration 、@Component 。在配置類中注入,具體如下操作:
// 攔截器處理 @Configuration //或者 @Component public class CheckFilter implements HandlerInterceptor { @Autowired private SystemService systemService; } // 配置類處理 @Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { @Autowired private CheckFilter checkFilter; @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(checkFilter).addPathPatterns("/**"). excludePathPatterns("/admin/auth/**"); super.addInterceptors(registry); } @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); super.addResourceHandlers(registry); } @Override protected void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/",".jsp"); super.configureViewResolvers(registry); } }
三、知識總結
1、涉及spring的攔截器加載過程及IOC的管理
2、參考資料//www.dbjr.com.cn/article/223241.htm
springboot HandlerInterceptor 攔截器匹配規(guī)則寫錯 導致 攔截器無效
項目中發(fā)現(xiàn)攔截器無效,訪問接口 /user/xxx/xxx 沒有進入到攔截器中
@Configuration public class WebConfigurer implements WebMvcConfigurer { @Autowired private UserInterceptor userInterceptor; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(userInterceptor).addPathPatterns("/user/*"); } }
原因是 攔截器的匹配規(guī)則弄錯了。我希望 userInterceptor攔截器 攔截 /user/下所有路徑的接口
正確攔截規(guī)則是 /user/**
攔截規(guī)則粟子
addPathPatterns("/**")
表示攔截所有的請求,
addPathPatterns("/**")
表示攔截所有的請求,
addPathPatterns("/test/**")
表示攔截/test/ 下的所有路徑請求,
addPathPatterns("/test/*")
表示攔截/test/abc,攔截/test/aaa , 不攔截 /test/abc/def
addPathPatterns("/test/**").excludePathPatterns("/test/login", “/test/register”)
表示攔截/test/ 下的所有路徑請求,但不攔截 /test/login 和 /test/register
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MybatisPlus保存、讀取MySQL中的json字段失敗問題及解決
這篇文章主要介紹了MybatisPlus保存、讀取MySQL中的json字段失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07elasticsearch+logstash并使用java代碼實現(xiàn)日志檢索
這篇文章主要介紹了elasticsearch+logstash并使用java代碼實現(xiàn)日志檢索,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02多個sheet Excel 數(shù)據(jù)導入數(shù)據(jù)庫的實現(xiàn)方法
這篇文章主要介紹了多個sheet Excel 數(shù)據(jù)導入數(shù)據(jù)庫的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03詳解SpringBoot如何實現(xiàn)統(tǒng)一后端返回格式
在前后端分離的項目中后端返回的格式一定要友好,不然會對前端的開發(fā)人員帶來很多的工作量。那么SpringBoot如何做到統(tǒng)一的后端返回格式呢?本文將為大家詳細講講2022-04-04