2010-08-12 25 views
15

Usar Spring 3.0.2.RELEASE. Tengo 2 controladores en el paquete com.myCompany. Los controladores se activan a través de componentes-scanvincular Spring HandlerInterceptor solo a un controlador

<context:component-scan base-package="com.myCompany" /> 

entonces estoy teniendo un aprieto interceptor a los 2 controladores vía

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="interceptors"> 
    <list> 
     <ref bean="myInterceptor"/> 
    </list> 
    </property> 
</bean> 

¿Cómo puedo enlazar el interceptor a sólo un controlador específico o sólo a ciertos métodos dentro de un controlador? Antecedentes: Quiero inspeccionar el URL que contiene ciertos parámetros

Docu Link

+0

Check también [esta solución] (http://karthikg.wordpress.com/2009/10/12/athandlerinterceptor-for-spring-mvc/) con el uso de la costumbre anotación. –

Respuesta

19

Cuando se inyecta interceptores en un grano de HandlerMapping, los interceptores se aplican a todos los manejadores de mapeado por que HandlerMapping. Eso estuvo bien en los días previos a la anotación, ya que solo habría configurado múltiples beans HandlerMapping. Sin embargo, con las anotaciones, tendemos a tener un solo DefaultAnnotationHandlerMapping que mapea todo, por lo que este modelo no funciona.

La solución es usar <mvc:interceptors>, donde mapea explícitamente las rutas a los beans interceptores. Ver el docs, y este ejemplo:

<mvc:interceptors> 
    <mvc:interceptor> 
     <mvc:mapping path="/secure/*"/> 
     <bean class="org.example.SecurityInterceptor" /> 
    </mvc:interceptor> 
</mvc:interceptors> 
+0

@skaffman Buen trabajo –

+0

Gracias. Pero no lo entiendo ¿Puedo agregar el fragmento en el archivo que contiene "? Luego obtengo" org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: El comodín coincidente es estricto, pero no se puede encontrar ninguna declaración para el elemento 'mvc: interceptores'. " Agregué xmlns: mvc =" http://www.springframework.org/schema/mvc " –

+0

@Martin: consulte la sección fija enlace a los documentos. Necesita agregar 'schemaLocation' además del espacio de nombres. – skaffman

Cuestiones relacionadas