Java 带注释的Spring HandlerInterceptor映射

Java 带注释的Spring HandlerInterceptor映射,java,spring,model-view-controller,Java,Spring,Model View Controller,你好。 我有一个SpringMVC应用程序和2个控制器。 第一个控制器(PublicController)可以处理来自所有用户的请求,第二个控制器(PrivateController)只能处理授权用户 所以我实现了两个处理器拦截器 @Configuration @EnableWebMvc @ComponentScan(basePackages="webapp.base.package") public class WebApplicationConfig extends WebMvcConfig

你好。 我有一个SpringMVC应用程序和2个控制器。 第一个控制器(PublicController)可以处理来自所有用户的请求,第二个控制器(PrivateController)只能处理授权用户

所以我实现了两个处理器拦截器

@Configuration
@EnableWebMvc
@ComponentScan(basePackages="webapp.base.package")
public class WebApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggerInterceptor());
        registry.addInterceptor(new AccessInterceptor());
    }

}
我需要我的
LoggerInterceptor
来处理所有控制器的请求,我的
AccessInterceptor
只处理
PrivateController
的请求。 我必须将
拦截器
映射到带有注释的
控制器

只要解决它就行了

@Configuration
@EnableWebMvc
@ComponentScan(basePackages="webapp.base.package")
public class WebApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggerInterceptor()).addPathPatterns("/**");;
        registry.addInterceptor(new AccessInterceptor()).addPathPatterns("/private/**");;
    }

}

我不知道为什么,当我用你的方式时,它起了作用。但是拦截器执行了两次。我找到了另一种方法

    @Bean
    public MappedInterceptor interceptor() {
        return new MappedInterceptor(null, new String[]{"/","/**/*.js", "/**/*.html", "/**/*.css"}, new LogInterceptor());
    }

如果我在springboot应用程序中使用此解决方案,它会破坏一切。@LNT springboot将因
@EnableWebMvc
注释而破坏。这将关闭springboot的默认mvc配置。只要删除此注释,它就会工作。