2012-05-24 17 views
7

Ho seguito la documentazione per HandlerInterceptors. Notando che nella nuova versione di Spring: "l'intercettatore configurato si applicherà a tutte le richieste gestite con i metodi di controllo annotati".Spring 3.1 HandlerInterceptor Non viene chiamato

Il seguente è in un file di configurazione XML: enter image description here

Ho un controller annotato che inizia in questo modo:

enter image description here

Quando richiedo un URL che esegue il codice del controller, il mio intercettore il codice non viene mai chiamato. Qualcuno può spiegare perché?

Il codice intercettore è:

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 

public class DomainNameInterceptor extends HandlerInterceptorAdapter { 
    public boolean preHandle(HttpServletRequest request, 
          HttpServletResponse response, Object handler) 
     throws Exception { 
    System.out.println("Why is this not called?"); 
    return true; 
    } 
} 

stavo usando la seguente documentazione: Spring Core 3.1.x Documentation

ho fatto una ricerca per HandlerInterceptor e seguirono l'esempio dato all'interno della documentazione nel link incluso.

+5

Potrebbe mostrare il codice dell'intercettore? E per favore - no screenshot :) – daniel

+1

Puoi anche collegare la documentazione che stavi seguendo. –

+0

Ho incluso il codice dell'intercettore sopra. Qualche idea? –

risposta

9

Se il contesto MVC è stato configurato utilizzando <mvc:annotation-driven/>, penso che lo handlerMapping creato quando si definiscono i bean basati su questo spazio dei nomi personalizzato sovrascrive il gestore che è stato definito. Un modo migliore per registrare i tuoi intercettori sarebbe quella di utilizzare il <mvc:interceptors> sottotag per definire gli intercettori, in questo modo si otterrà registrato alla corretta handlerMapping: risposta

<mvc:annotation-driven> 
    <mvc:interceptors> 
     <ref bean="interceptor"/> 
    </mvc:interceptors> 
</mvc:annotation-driven> 
+2

Questa risposta mi ha fatto andare nella giusta direzione, grazie! Mi ero dimenticato di impostare una classe usando @EnableWebMvc nella mia classe WebMvcConfig. Il seguente finito per lavorare: '@Configuration @EnableWebMvc public class WebMvcConfig estende WebMvcConfigurerAdapter { \t @Inject \t privato ConnectionRepository connectionRepository; \t @Override \t addInterceptors public void (registro InterceptorRegistry) {// \t Equivalente a \t \t registry.addInterceptor (nuova DomainNameInterceptor()); \t} ' –

+2

non è un tag secondario di in Spring 3.1, ma ora è il proprio tag radice. Ottima risposta altrimenti. –

8

di Biju sopra è corretto tranne che in primavera 3.1 si deve fare this:

<mvc:interceptors> 
    <mvc:interceptor> 
    <mvc:mapping path="/pathToIntercept/**" /> 
    <bean class="com.foo.bar.Interceptor" /> 
    </mvc:interceptor> 
</mvc:interceptors>