SpringBoot设置拦截器失效原因记录
这次拦截器失效的原因就是两个配置类起冲突了。
·
问题描述
这次拦截器失效的原因就是两个配置类起冲突了。
首先:第一个类WebMvcConfig去继承了WebMvcConfigurationSupport。
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 设置静态资源映射(没有将静态资源放在static下的解决方案)
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
log.info("开始静态资源映射");
}
}
其次:第二个类AdminInterceptor去实现了WebMvcConfigurer。
@Configuration
public class AdminInterceptor implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
/**
* 设置拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
log.info("开始拦截请求");
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")//拦截所有请求,包括静态资源
.excludePathPatterns("/employee/login","/employee/logout","/backend/**","/front/**");//放行的请求
}
}
注意:单独将这两个配置类写出来,其中拦截器就会失效。(具体原因,感兴趣的就去看源码吧,主要是我也不太懂,嘿嘿。)。
解决方案:
我的解决方案就是将两个方法写在一个类中就可以了。
注意:我将两个方法写在继承了WebMvcConfigurationSupport的里面,拦截器依然失效(亲测)。
@Slf4j
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
/**
* 设置静态资源映射(没有将静态资源放在static下的解决方案)
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
log.info("开始静态资源映射");
}
/**
* 设置拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
log.info("开始拦截请求");
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")//拦截所有请求,包括静态资源
.excludePathPatterns("/employee/login","/employee/logout","/backend/**","/front/**");//放行的请求
}
}
提示:其他原因失效可能就是自己粗心没有在拦截器上依赖注入组件@Component或者配置类上没有写@Configuration。
更多推荐
已为社区贡献1条内容
所有评论(0)