Este artículo estudia principalmente la introducción de interceptores en SpringMVC, código de ejemplo, configuración y otros contenidos, de la siguiente manera.
El interceptor de procesador de SpringMVC es similar al filtro de filtro en el desarrollo de servlet, que se utiliza para preprocesar y postprocesar el procesador. Este artículo resume principalmente cómo se define el interceptor en SpringMVC, así como en la ejecución y uso del interceptor.
En SpringMVC, defina el interceptor para implementar la interfaz Handlerinterceptor e implementar los tres métodos proporcionados en la interfaz, de la siguiente manera:
// prueba el interceptor1public de la clase handlerinterceptor1 implementa handlerinterceptor {@Override public boolean prehandle (httpservletRequest solicitud, httpservletreSponse respuesta, manejador de objetos) lanza la excepción {System.out.println ("HandlerInterceptore1 .... PreHandle"); // Falso de interacción, no hacia abajo hacia abajo Ejecución de la ejecución hacia abajo hacia abajo. Verdadero significa retorno de liberación true;}@anular public void postthandle (httpservletRequest solicitud, httpservletResponse respuesta, manejador de objetos, modelandView modelandView) lanza la excepción {System.out.println ("HandlerInterceptor1..POSTHANDLE");}@anulación public void Aftercompletion (httpServreReReReRe Respuesta, Handler de objetos, Exception Ex) lanza la excepción {System.out.println ("HandlerInterceptor1..AfterCompletion");}}Haré un análisis simple para estos tres métodos:
En SpringMVC, el interceptor está configurado para la mano específica, es decir, si un interceptor está configurado en un manejo de mano, el controlador asignado con éxito a través del manejo de la mano eventualmente usará el interceptor. Por ejemplo, suponga que el mapeador que configuramos en el archivo de configuración es org.springframework.web.servlet.handler.beannameUrlHandlermapping, luego podemos configurar el interceptor de la siguiente manera:
<Bean> <Property Name = "Interceptors"> <List> <ref Bean = "HandlerInterceptor1"/> <ref Bean = "HandlerInterceptor2"/> </List> </Property> </Bean> <Bean ID = "HandlerInterceptor1"/> <Bean ID = "HandlerInterceptor2"/>>
Entonces, en SpringMVC, ¿cómo configurar un interceptor global? Como se mencionó anteriormente, los interceptores en SpringMVC están dirigidos a mapeadores específicos. Para resolver este problema, el marco SpringMVC inyecta configurados interceptores globalmente similares en cada manejo de mano, para que puedan convertirse en interceptores globales. La configuración es la siguiente:
< ruta = "/**"/> <bean/> </mvc: interceptor>
En general, usamos esta configuración, solo especifiquemos que la URL se interceptará en <MVC: Mapeo>.
Escriba dos interceptores, Handlerinterceptor2 y HandlerInterceptor3, de acuerdo con la configuración anterior. Luego probaremos la ejecución de los tres interceptores y haremos un resumen relacionado.
En otras palabras, cambiamos el valor de retorno del método previo a la mano de los tres interceptores a verdaderos para probar el orden de ejecución del interceptor. Los resultados de la prueba son los siguientes:
Handlerinterceptor1 ...
Handlerinterceptor2 ...
Handlerinterceptor3… .PrehandleHandlerinterceptor3 ...
Handlerinterceptor2 ...
Handlerinterceptor1 ...Handlerinterceptor3 ...
Handlerinterceptor2….
Handlerinterceptor1 ...
Se realiza un resumen en función de los resultados impresos: cuando se liberan todos los interceptores, el método prehandil se ejecuta en el orden de configuración; mientras que los otros dos métodos se ejecutan en el orden de configuración.
Cambiamos el valor de retorno en el método prehandil del tercer interceptor a falso, y los dos primeros aún son verdaderos, para probar la orden de ejecución del interceptor. Los resultados de la prueba son los siguientes:
Handlerinterceptor1 ...
Handlerinterceptor2 ...
Handlerinterceptor3… .PrehandleHandlerinterceptor2….
Handlerinterceptor1 ...
Haga un resumen basado en los resultados impresos:
1. Dado que se liberan los interceptores 1 y 2, se puede ejecutar el prehandamiento del Interceptor 3. En otras palabras, se puede liberar el interceptor anterior, y el último interceptor puede ejecutar Prehandle.
2. Interceptor 3 no lo libera, por lo que sus otros dos métodos no se ejecutan. Es decir, si un interceptor no lo libera, entonces sus otros dos métodos no se ejecutarán.
3. Mientras haya un interceptor que no se libere, el método posterior de todos los interceptores no se ejecutará, pero mientras se ejecute y libere Prehandle, se ejecutará el método AfterComplette.
De hecho, puede consultar la situación anterior. Es un caso especial. Echemos un vistazo a los resultados de la ejecución:
Handlerinterceptor1 ...
Obviamente, solo se ejecutó el método previo al Interceptor. Como ninguno de ellos fue liberado, ninguno de ellos ejecutó el método postizante y el método AfterComplettion.
Desde el segundo caso, por ejemplo, si desea escribir una lógica de procesamiento de excepciones unificadas, entonces el interceptor debe colocarse en la primera posición de la cadena del interceptor y debe liberarse, porque solo se ejecutará el complemento posterior, y si se coloca en la primera posición de la cadena de interceptores, el método posterior a la complicación se va a la última vez que se ejecutará la lógica de excepcional que se puede ejecutar en el procesamiento de excepción.
Por ejemplo, inicie sesión en el interceptor de autenticación y colóquelo en la primera posición en el enlace del interceptor (si hay un manejo de excepciones unificadas, debe colocarse detrás del manejo de excepciones unificadas). El interceptor de verificación de permiso se coloca después de iniciar sesión en el interceptor de autenticación (porque el permiso solo se verifica después de iniciar sesión).
Aquí hay un interceptor de verificación de inicio de sesión para explicar cómo usar el interceptor de SpringMVC.
Primero, veamos los requisitos: lo que queremos interceptar, lo que queremos hacer cuando interceptamos. La idea es la siguiente:
1. URL de solicitud de usuario
2. Interceptor realiza la verificación de la intercepción. Si la URL solicitada es una dirección pública (URL a la que se puede acceder sin iniciar sesión), que se lance.
Si la sesión del usuario no existe, salte a la página de inicio de sesión.
Si existe la sesión de usuario, suelte y continúe la operación.
//Login in @RequestMapping("/login")public String login(HttpServletRequest request, String username, String password) throws Exception {//In fact, you need to match the database //...//Here, assume that the login is successful HttpSession session = request.getSession();session.setAttribute("username", username);return "Redirect: QueryItems.Action";} // Sogin @RequestMapping ("/logrout") public String logOut (httpservletRequest solicitud) lanza la excepción {httpsession session = request.getSession (); session.invalidate (); return "Redirect: QueryItems.action";} // prueba el interceptor 1 clase Public LoginInterceptor implementa HandlerInterceptor {// ejecutar antes de ingresar el método del controlador // se puede utilizar para la autenticación de identidad y la autorización de identidad. Si la autenticación no pasa, significa que el usuario no ha iniciado sesión. Este método debe interceptarla y no una mayor ejecución. De lo contrario, @Override public boolean PreHandle (httpservletRequest solicitud, httpServletResponse Respuesta, Handler de objetos) arroja una excepción {// Obtener la urlString UrlString solicitada URL = request.getRequesturi (); // Direquire si la dirección pública de URL es pública (Configurar la dirección pública en el archivo de configuración cuando realmente se usa) aquí es una dirección supuesta la dirección pública que se registra en la dirección pública que se registra en la dirección pública. if (url.indexof ("login.action")> 0) {// Si se realiza el envío de inicio de sesión, Release return true;} // juez sessionhttpsession session = request.getSession (); // fetch la información de identidad del usuario de la sesion String username = (String) session.getAttribute ("userName"); if (username! = null) {return verdadero verdadero username = (string) sessuteTuteTtribute ("userName"); if (username! = null) {return verdadero verdadero username de sesser. La identidad del usuario debe verificarse, saltar a la solicitud de la página de inicio de sesión.getRequestDispatcher ("/web-inf/jsp/login.jsp"). Avance (solicitud, respuesta); return false;} // Guardar espacio, omitir los otros dos métodos y no escribirlos, y no hay necesidad de tratar con ellos}Luego configure el interceptor:
<
De esta manera, cuando solicitemos cualquier URL, seremos capturados por el interceptor que acabamos de definir, y luego determinaremos si hay información del usuario en la sesión. Si no, saltaremos a la página de inicio de sesión y nos dejaremos iniciar sesión:
<Form Action = "$ {PageContext.Request.ContextPath} /Login.Action" Method = "Post"> UserName: <input type = "text" name = "username" /> <br> contraseña: <input type = "contraseña" name = "contraseña" /> <br> input type = "enviar" name = "sembrar" /> < /form>Esta es básicamente la introducción al uso de interceptores.
Lo anterior es todo el contenido de este artículo sobre la explicación detallada del interceptor en SpringMVC y los ejemplos de código. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!