是否可以监控进来的每个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等。
提前致谢!
答案 0 :(得分:5)
看看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提供的链接:
答案 1 :(得分:0)
拦截器必须“有线”。通过配置xml或JavaConfig。