【发布时间】:2020-11-30 18:19:53
【问题描述】:
我已经努力让我的日志拦截器工作了三天。
我感觉已经通过 Stackoverflow 和互联网上的其他教程,但我仍然没有找到有效的解决方案。
我正在使用 Java 8 和 Spring 框架 4.3.25.RELEASE。
这是我的代码。
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public LoggingInterceptor loggingInterceptor () {
return new LoggingInterceptor ();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor( loggingInterceptor() );
}
}
@Component
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("afterCompletion");
}
}
会不会是我没有使用@SpringBootApplication注解?
【问题讨论】:
-
从普通调试开始:在
addInterceptors中插入跟踪语句或断点,看看是否被调用。 -
@chrylis-cautiouslyoptimistic- 感谢您的快速回复和建议,但我已经这样做了,并且从未触发 addInterceptors 断点。
-
你还在使用 Spring MVC 还是 Spring Boot?如果您使用 Spring Boot,请删除
EnableWebMvc并确保它位于组件扫描覆盖的包中。最后,您为您的LoggingInterceptor使用@Bean方法,因此您不需要@Component。 -
@M.Deinum 在我的 pom.xml 中,在其他依赖项中,我使用的是 spring-boot 版本 2.1.8.RELEASE 和 spring-webmvc 版本 4.3.25.RELEASE
-
@Eldridge 在使用 Spring Boot 时,您应该几乎从不指定版本; Spring Boot 2 应该使用 Spring 5。弄清楚为什么你的配置类没有包含在 Spring 上下文中(例如,包组织)。
标签: java spring maven configuration interceptor