2012-05-24 17 views
7

Seguí la documentación para HandlerInterceptors. Teniendo en cuenta que en la nueva versión de Spring: "el interceptor configurado se aplicará a todas las solicitudes manejadas con métodos de control anotados".Spring 3.1 HandlerInterceptor No se llama

El siguiente es un archivo de configuración xml: enter image description here

he un controlador anotada comenzando así:

enter image description here

Cuando solicita una dirección URL que se ejecuta el código del controlador, mi interceptor el código nunca se llama. ¿Alguien puede explicar por qué?

El código interceptor es:

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; 
    } 
} 

que estaba usando la siguiente documentación: Spring Core 3.1.x Documentation

Hice una búsqueda para HandlerInterceptor y siguieron el ejemplo que se da dentro de la documentación en el enlace incluido.

+5

¿Podría mostrar el código del interceptor? Y por favor, no hay capturas de pantalla :) – daniel

+1

También puede vincular la documentación que estaba siguiendo. –

+0

He incluido el código Interceptor arriba. ¿Algunas ideas? –

Respuesta

9

Si ha configurado su contexto MVC usando <mvc:annotation-driven/>, entonces creo que el handlerMapping creado al definir beans basado en este espacio de nombres personalizado está anulando el HandlerMapping que ha definido. Una mejor manera de dar de alta sus interceptores sería el uso de la etiqueta secundaria <mvc:interceptors> para definir los interceptores, de esta manera se obtendrá certificado a la handlerMapping correcta: Respuesta

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

Esta respuesta me dirigió en la dirección correcta, ¡gracias! Olvidé que configuré una Clase usando @EnableWebMvc en mi clase WebMvcConfig. La siguiente terminó trabajando: '@Configuration @EnableWebMvc clase pública se extiende WebMvcConfig WebMvcConfigurerAdapter { \t @Inject \t privada ConnectionRepository connectionRepository; \t @ Override \t addInterceptors public void (registro InterceptorRegistry) {// \t equivalente a \t \t registry.addInterceptor (nueva DomainNameInterceptor()); \t} ' –

+2

no es una etiqueta hija de en Spring 3.1, pero ahora es su propia etiqueta raíz. Gran respuesta de lo contrario. –

8

de Biju anterior es correcta, excepto en la primavera de 3,1 que tiene que hacer esto:

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