springboot拦截器HandlerInterceptor的注入问题(转载)

来源:https://blog.csdn.net/baidu_28068985/article/details/106659825

 

一、问题描述
项目启动后,拦截器下的注入为null,影响拦截器的逻辑操作。如下图:

 

二、解决策略
原因: 拦截器加载是在springcontext创建之前完成,详情可以看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、参考资料https://blog.csdn.net/dengdeng333/article/details/87878882
————————————————
版权声明:本文为CSDN博主「言午玉口才」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_28068985/article/details/106659825

posted @ 2022-04-01 15:21  拥抱天空  阅读(373)  评论(0编辑  收藏  举报