Spring MVC 监控/监视每个请求

Spring MVC Monitor / Watch Every Request

是否可以监控进入的每个 Spring 请求?

类似于:

public class MySpringWatcher extends SpringSomething{

    @Override
    public HttpServletResponse watchResponse(HttpServletRequest request){

        // Starts a timer and counter for analyzing each request made
        MyTimerCounter timerCounter = new MyTimerCounter(request);

        //Do the request, process Java and JSTL Code
        request.doSomething();

        // Mark complete and then log results
        timerCounter.stop();

    }

}

或者也许

public class MySpringWatcher extends SpringSomething{

    MyTimerCounter activeRequest;

    @Override
    public SpringResponse beforeRequest(HttpServletRequest request){

        // Starts a timer and counter for analyzing each request made
        activeRequest = new MyTimerCounter(request);

    }

    @Override
    public SpringResponse afterRequest(HttpServletRequest request, HttpServletResponse response){

        // Mark complete and then log results
        activeRequest.stop();

    }

}

我想监控每个请求,以便我可以分析每个请求并计算 SQL 个请求、时间等,但我需要对每个请求和每个控制器执行此操作。

它应该在调用控制器方法之前开始,并在 JSP 完成之后结束。

我正在使用 SpringMVC 4、Spring Boot、Spring Security、Morphia 等

提前致谢!

看看 HandlerInterceptors (1.11.5 Interceptors)

它们将允许您在处理之前和之后拦截请求。


根据 Nitroware 的评论进行更新:

如果使用 spring boot/JavaConfig,您需要在 MvcConfig 中添加以下内容:

@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor());
    }

    @Bean
    public MySpringWatcher myInterceptor() {
        return new MySpringWatcher();
    }

    // ... The rest of your configuration ...
}

这将允许您注册新的 HandlerInterceptor。


对于基于 xml 的配置,请参阅 kmansoor 提供的 link:

http://www.journaldev.com/...

拦截器必须是 'wired'。通过配置 xml 或 JavaConfig.