Java 带注释的Spring HandlerInterceptor映射
你好。 我有一个SpringMVC应用程序和2个控制器。 第一个控制器(PublicController)可以处理来自所有用户的请求,第二个控制器(PrivateController)只能处理授权用户 所以我实现了两个处理器拦截器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
@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配置。只要删除此注释,它就会工作。