基于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、參考資料//m.fzitv.net/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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MyBatis動態(tài)SQL中的trim標簽的使用方法
這篇文章主要介紹了MyBatis動態(tài)SQL中的trim標簽的使用方法,需要的朋友可以參考下2017-05-05
Spring中Controller和RestController的區(qū)別詳解
這篇文章主要介紹了Spring中Controller和RestController的區(qū)別詳解,@Controller是標識一個Spring類是Spring MVC controller處理器,@Controller類中的方法可以直接通過返回String跳轉到jsp、ftl、html等模版頁面,需要的朋友可以參考下2023-09-09
詳解SpringMVC組件之HandlerMapping(二)
這篇文章主要介紹了詳解SpringMVC組件之HandlerMapping(二),HandlerMapping組件是Spring?MVC核心組件,用來根據(jù)請求的request查找對應的Handler,在Spring?MVC中,有各式各樣的Web請求,每個請求都需要一個對應的Handler來處理,需要的朋友可以參考下2023-08-08
ThreadLocal數(shù)據(jù)存儲結構原理解析
這篇文章主要為大家介紹了ThreadLocal數(shù)據(jù)存儲結構原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
java發(fā)送heartbeat心跳包(byte轉16進制)
這篇文章主要介紹了java發(fā)送heartbeat心跳包(byte轉16進制),需要的朋友可以參考下2014-05-05

