带有注释的Spring HandlerInterceptor映射

时间:2013-05-23 06:17:09

标签: java spring model-view-controller

美好的一天。 我有一个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

2 个答案:

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