2015-02-06 80 views
1

是否有可能監視每個到來的Spring請求?Spring MVC監視器/監視每個請求

喜歡的東西:

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請求,時間等,但我需要做的每個請求和每個控制器。

它應該在調用controller方法之前開始,並在JSP完成後立即結束。

我用SpringMVC使用4,春季啓動,春季安全,嗎啡等

提前感謝!

+1

你可以用過濾器來做到這一點。 – 2015-02-06 18:32:31

+0

謝謝!所以我只是創建了一個'MySpringWatcher'的bean來擴展'javax.servlet.Filter',一切都應該工作? – Nitroware 2015-02-06 18:37:44

+0

我確實嘗試了這一點,但是我必須這樣做,因爲它運行這個命令內部的方法,如每個請求1000次,我只是不知道如何讓它工作。下面的答案真的有幫助 – Nitroware 2015-02-06 20:47:04

回答

5

看看HandlerInterceptors(1.11.5 Interceptors

他們會允許你之前和之後的處理請求攔截。


更新基於評論來自Nitroware

如果使用彈簧啓動/ 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提供的鏈接:

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

+0

感謝您的迴應!當我使用:@Component public class MySpringWatcher extends HandlerInterceptorAdapter {...}'並實現所有方法時,我必須做錯了,類被實例化,但方法從不調用。 – Nitroware 2015-02-06 19:15:25

+1

你在攔截器的配置文件中有條目嗎?看看這個:http://www.journaldev.com/2676/spring-mvc-interceptors-example-handlerinterceptor-and-handlerinterceptoradapter – kmansoor 2015-02-06 20:21:34

+0

我使用的是spring引導,所以沒有XML,但我弄清楚了什麼在你的'public class MvcConfig extends WebMvcConfigurerAdapter'中加入'''@Override public void addInterceptors(InterceptorRegistry registry){ 註冊表。addInterceptor(myInterceptor()); } @Bean @Autowired MySpringWatcher myInterceptor(){ 返回新MySpringWatcher(); }''' – Nitroware 2015-02-06 20:43:44

0

的攔截器必須 '有線'。通過配置xml或JavaConfig。