【问题标题】:Java spring framework interceptor issuesJava Spring框架拦截器问题
【发布时间】:2020-11-30 18:19:53
【问题描述】:

我已经努力让我的日志拦截器工作了三天。

我感觉已经通过 Stackoverflow 和互联网上的其他教程,但我仍然没有找到有效的解决方案。

我正在使用 Java 8Spring 框架 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


【解决方案1】:

您可以扩展 HandlerInterceptorAdapter,并覆盖您设置的方法。我将在下面发布我的代码。

@Component
public class MyIntercepter extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse 
response, Object handler) throws Exception {
return true;
}



@Configuration
    public class WebMvcConfiguration implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(myIntercepter);
        }
    }

【讨论】:

  • 我认为这个解决方案适用于 spring framework 5+
  • 这不是问题的解决方案,因为注册没有发生,改变拦截器的实现不会改变注册过程。
  • 对不起。我没有看清楚spring frameword版本。
猜你喜欢
  • 1970-01-01
  • 2013-06-19
  • 2011-12-24
  • 2011-10-04
  • 2018-08-09
  • 2020-09-18
  • 1970-01-01
  • 2015-11-22
  • 2019-07-07
相关资源
最近更新 更多