问题描述

        这次拦截器失效的原因就是两个配置类起冲突了。

        首先:第一个类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。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐