【问题标题】:Spring HandlerInterceptor mapping with annotations带有注解的 Spring HandlerInterceptor 映射
【发布时间】:2013-05-18 09:25:18
【问题描述】:

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

所以我实现了两个HandlerInterceptor`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

【问题讨论】:

    标签: java spring model-view-controller


    【解决方案1】:

    只要解决它。

    @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/**");;
        }
    
    }
    

    【讨论】:

    • 如果我在我的 springboot 应用程序中使用这个解决方案,它会破坏一切。
    • @LNT springboot 会因为@EnableWebMvc 注释而中断。这会关闭 springboot 的默认 mvc 配置。只需删除此注释即可。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 2015-03-16
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多