2012-07-26 19 views
11

He estado estudiando Grails desde hace bastante tiempo. Y escaneado un poco sobre filtros e interceptores. Ambos tienen casi la misma funcionalidad de rastrear las sesiones o redirigir a usuarios no autorizados en un controlador en particular.Grails Filters vs Interceptor

Pero estoy confundido cuándo y por qué debería usar Filter than Interceptor y viceversa. Dado que los Inceptores tienen dos métodos de control beforeInterceptor y afterInterceptor y para los filtros a tres cierres comunes before, after y afterView.

Mis preguntas son cuáles son los pros y los contras del uso del filtro contra el interceptor o viceversa. De esta manera, nosotros, los desarrolladores, podemos decidir cuándo, dónde y por qué deberíamos usar Filtro o Interceptor en un Controlador particular para hacer un seguimiento, redirigir, etc.

Respuesta

14

Use uno o ambos interceptores en un controlador cuando la intercepción la lógica solo se aplica a ese controlador.

Utilice un filtro cuando la lógica se aplica a múltiples (o todos) controladores, o cuando necesita hacer algo después de que se visualiza la vista (no hay interceptor equivalente a afterView), o si solo quiere mantener todo centralizado en un lugar en lugar de distribuirlo en archivos de controlador separados.

+4

Ya veo. ¿Pero no puede crear un controlador abstracto para mantener una lógica de interceptación similar y dejar que este controlador sea el padre de todos los otros controladores? ¿En qué instancia podemos decir que necesitamos tener la lógica de filtrado declarada por 'Filters' en su cierre,' afterView'? –

+0

Y luego necesitarás un poco de lógica diferente, así que necesitas crear otro controlador abstracto. Los filtros pueden ayudarlo a concentrar el código en un lugar y omitir las dependencias que realmente no necesita. –

0

Los filtros antiguos (de Grails 2) están en desuso en Grails 3. La sustitución de los filtros son interceptores.

El uso de interceptores es para acciones tales como: autenticación, inicio de sesión, etc.
Los interceptores (como su nombre lo indica) están interceptando las solicitudes web entrantes y desencadenan acciones relacionadas. Las acciones se definen en el Controlador relacionado.

Los Interceptores tienen algunos beneficios importantes (sobre los Filtros) tales como soporte para compilación estática y permiten configuraciones flexibles.
Estos son los 3 principales métodos de la Interceptor:
- boolean antes() {true}
- boolean después de() {true}
- void afterView() {}

Los Iterceptores están configurados como Spring Beans (en el contexto de la aplicación Spring) y están configurados para ser autoajustados por sus nombres.

Cuestiones relacionadas