美好的一天。 我有一个spring mvc应用程序和2个控制器。 第一个控制器(PublicController)可以处理来自所有用户的请求,Second(PrivateController)只能处理授权用户。
所以我实现了两个Handler Interceptor`s
@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
答案 0 :(得分:20)
解决它。
@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/**");;
}
}
答案 1 :(得分:2)
我不知道为什么,当我按照你的方式使用时,它有效。但拦截器执行了两次。我发现了另一种方法。
@Bean
public MappedInterceptor interceptor() {
return new MappedInterceptor(null, new String[]{"/","/**/*.js", "/**/*.html", "/**/*.css"}, new LogInterceptor());
}