interceptores Spring MVC - Java

Interceptor (Interceptor) peticiones de URL para pre / post-filtro.

Filtro Interceptor y el uso similar, pero diferentes implementaciones.

Interceptor es SpringMVC de componentes estándar, Interceptor después de haber sido creado es natural para ejecutar en el contenedor COI. ,

Filtro J2EE es un componente estándar, excepto Filtrar recipiente por diferentes fabricantes obtenidos.

Interceptor se basa en la programación orientada a SpringAOP subyacente de aspecto.

Interceptor proceso de desarrollo:
  Maven dependiente servlet-api
  implementa la interfaz HandlerLnterceptor
  applicationContext.xml dispuesto interceptación

 

1. El uso de sustancialmente interceptores

(1) la introducción de dependencias

< Dependencia > 
    < la groupId > el javax.servlet </ el groupId > 
    < la artifactId > el javax.servlet-api </ el artifactId > 
    < versión > 3.1.0 </ Version > 
    <! - Prevenir la configuración del servlet Tomcat viene con la API de cada API conflicto -> 
    <! - medios entendido que sólo los desarrolladores serán compilados en una referencia -> 
    < ámbito > Siempre </ alcance > 
</ dependencia >

(2) una interfaz implementada HandlerLnterceptor

// interceptor debe heredar HandlerInterceptor interfaz 
pública  de clase myInterceptor los implementos HandlerInterceptor {
     // También debe implementar los siguientes tres métodos
     // preHandler: procesamiento de pre-ejecución
     // postHandle: recurso de destino ha sido procesado marco SpringMVC después de la vuelta, sino también ninguna respuesta antes del texto.
    // afterCompletion: respuesta de texto que se ha generado, como automáticamente después de serialización Jackson 
    pública  de Boole El preHandle (la solicitud de HttpServletRequest, respuesta de la HttpServletResponse, objeto Handler) lanza la excepción { 
        System.out.println (request.getRequestURL () + "listo para ejecutar" ) ;
         // debe devolver un valor booleano, solicitud de transferencia verdadera será hacia atrás (bloqueo o controlador), solicitud de falsa está bloqueado, devuelve la respuesta directamente 
        de regreso  a la verdadera ;
    } 

    Pública  vacío postHandle (HttpServletRequest solicitud, HttpServletResponse respuesta, manipulador de objetos, ModelAndView ModelAndView) lanza la excepción { 
        System.out.println (request.getRequestURL () + "目标处理成功" ); 
    } 

    Pública  vacío afterCompletion (HttpServletRequest solicitud, HttpServletResponse respuesta, manipulador de objetos, Exception ex) lanza la excepción { 
        System.out.println (request.getRequestURL () + "响应内容已产生" ); 
    } 
}

(3) applicationContext.xml interceptación de configuración

< MVC: interceptores > 
    < MVC: Interceptor > 
        <! - Intercepta que la URL de -> 
        < MVC: Mapeo de ruta = "/ **" /> 
        <! - Uso después de clase interceptor que manejó -> 
        < el grano de clase = "com.ikidana.restful.interceptor.MyInterceptor" /> 
    </ MVC: Interceptor > 
</ MVC: interceptores >

(4) Resultados de las pruebas

Si visita: http: // localhost: 8080 / descanso / personas

siguientes aparece el mensaje:
http: // localhost: 8080 / descanso / personas listas para ejecutar
http: // localhost: 8080 / reparador / personas objetivo de éxito del tratamiento
http: // localhost: 8080 / reparador / personas contenido de la respuesta generada

 

consejos 2.Interceptor

(1) No incluir interceptación de recursos estáticos

Mediante la configuración de la applicationContext.xml a:

< Mvc: interceptores > 
    < MVC: interceptor > 
        < MVC: mapeo de ruta = "/ **" /> 
        <! - 对那些资源不进行拦截-> 
        < MVC: excluir de mapeo de ruta . = "/ ** ico " /> 
        < mvc: excluir de mapeo de ruta . =" / ** jpg " /> 
        < mvc: excluir de mapeo de ruta = "/ ** gif." /> 
        < mvc: excluir de mapeo de ruta =" / **. js" /> 
        < mvc: excluir de mapeo de ruta = " / ** css" /> 
        <frijol clase= "com.ikidana.restful.interceptor.MyInterceptor" /> 
    </ mvc: interceptor > 
</ mvc: interceptores >

Pero los problemas de configuración anteriores son: CI puede ser mucho más
que todos podemos sometemos todos los archivos estáticos en un directorio, este directorio puede interceptar:

 

 A continuación se muestra para interceptar todo el directorio:
<MVC: Mapping the excluir-path = "/ Recursos / **" />
por unos determinados prefijos también:
<MVC: Mapping the-ruta de exclusión = "/ REST / **" />

(2) Si la solicitud es interceptado múltiples interceptores, que primero realizará una?

  Si configuramos múltiples interceptores:

< Mvc: interceptores > 
    < mvc: interceptor > 
        < mvc: mapeo de ruta = "/ **" /> 
        < bean clase = "com.ikidana.restful.interceptor.MyInterceptor" /> 
    </ mvc: interceptor > 
    < mvc: interceptor > 
        < mvc: mapeo de ruta = "/ **" /> 
        < bean clase = "com.ikidana.restful.interceptor.MyInterceptor1" /> 
    </ mvc: interceptor > 
</ mvc: interceptores >

Si visita http: // localhost: 8080 / descanso / personas que la URL:
http: // localhost: 8080 / descanso / personas listas para ejecutar
http: // localhost: 8080 / descanso / personas listo para ejecutar -1
http: // localhost: 8080 / reparador / personas tratadas con éxito orientar -1
http: // localhost: 8080 / reparador / personas manipulación éxito objetivo
http: // localhost: 8080 / reparador / personas se han generado en respuesta al contenido de -1
http: // localhost: 8080 / rESTful / personas contenido de la respuesta generada

 

De acuerdo con el orden de procesamiento es configuraciones no totalmente prácticos:

 

 Algo similar a Python en middleware

pública  booleano preHandle (HttpServletRequest solicitud, HttpServletResponse respuesta, el controlador de objeto) lanza la excepción { 
    System.out.println (request.getRequestURL () + "准备执行" ); 
    response.getWriter () println (. "拦截器返回" );
    volver  falsa ; 
}

Interceptor puede controlar directamente el valor de retorno.
Sea o interceptores de middleware son particularmente útiles para el procesamiento de registros en Registro.

 

3. El usuario desarrollo de la base del interceptor de recopilación de información

(1) introducidos en log-dependiente

< Dependencia > 
    < groupId > ch.qos.logback </ groupId > 
    < artifactId > logback-clásico </ artifactId > 
    < versión > 1.2.3 </ versión > 
</ dependencia >

(2) Formato de registro de configuración, lo almacena en el directorio

<? Xml version = "1.0" encoding = "UTF-8" ?> 
< La configuración > 
    <! - RollingFileAppender sumador para generar un archivo de registro diario de rodadura -> 
    < appender nombre = "accessHistoryLog" clase = "CH. qos.logback.core.rolling.RollingFileAppender " > 
        <! - rollingPolicy rodando estrategia, TimeBasedRollingPolicy rodando en el tiempo -> 
        < rollingPolicy clase =" "ch.qos.logback.core.rolling.TimeBasedRollingPolicy > 
            <! - configuración ruta de registro de almacenamiento -> 
            < fileNamePattern > C: \ java_study \ proyecto \ REST \ log \ D REST%..log </ fileNamePattern >
        </ RollingPolicy > 
        <! - Definir el formato del registro de salida -> 
        < Encoder > 
            < patrón > [% hilo] D %%% Nivel Logger {10} - n-% MSG% </ patrón > 
        </ Encoder > 
    </ appender > 
    <! - bajo nivel de salida de registro es de depuración, direcciones de salida de la consola -> 
    <! - AccessHistoryInterceptor esta clase registros generados utilizarán las siguientes reglas generadas por el sello -> 
    <! - aditividad si , falsa salida a la salida de la consola solamente a las normas especificadas -> 
    < Logger nombre = "com.ikidana.restful.interceptor.AccessHistoryInterceptor" Nivel = "info"aditividad = "true"> 
        < Appender-ref ref = "accessHistoryLog" /> 
    </ logger > 
</ configuración >

(3) crear interceptores, y rellenar la información

público  de clase AccessHistoryInterceptor implementos HandlerInterceptor {
     // 创建一个registrador日志对象
    privada de registrador = (Logger) LoggerFactory.getLogger (AccessHistoryInterceptor. clase ); 

    pública  booleano preHandle (HttpServletRequest solicitud, HttpServletResponse respuesta, el controlador de objeto) lanza la excepción { 
        log StringBuilder = nuevo StringBuilder (); 
        log.append (request.getRemoteAddr ());  // 地址 
        log.append ( "|" ); 
        log.append (request.getRequestURL ());  // URL
        log.append ( "|" ); 
        log.append (request.getHeader ( "agente de usuario" )); 
        logger.info (log.toString ()); 
        volver  verdadera ; 
    } 
}

(4) registrado para su uso

< Mvc: interceptor > 
    < mvc: mapeo de ruta = "/ **" /> 
    < bean clase = "com.ikidana.restful.interceptor.AccessHistoryInterceptor" /> 
</ mvc: interceptor >

(5) el efecto de

 

 

flujo de proceso 4.SpringMVC

 

Supongo que te gusta

Origin www.cnblogs.com/yangmingxianshen/p/12521619.html
Recomendado
Clasificación