带有注释的Spring HandlerInterceptor映射

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

所以我实现了两个Handler Interceptor

@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的请求。 我必须使用注释将Interceptors映射到Controllers

解决它。

 @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()); }