Aprendí filtros antes, pero los filtros son para servlets y se usan en botas SpringMVC y Spring. No se sienten muy útiles en términos de funciones.
Aprendamos sobre interceptores aquí.
1. El orden de ejecución del interceptor
1. Contenido
2. Interceptor
En el interceptor, agregué tres (primero, dos, tercero), pero el contenido es casi el mismo.
paquete org.elvin.boot.interceptor; import org.springframework.web.servlet.handlerinterceptor; import org.springframework.web.servlet.modelandview; import javax.servlet.http.httpservletTrequest; import javax.servlet.http.httpsetserveTserveStoponse; HandlerInterceptor {@Override public boolean prehandle (httpservletRequest httpservletRequest, httpServletResponse httpServletResponse, objeto o) arroja excepción {System.out.println ("FirstInterceptor PreHandle"); devolver verdadero; } @Override public void postthandle (httpservletRequest httpservletRequest, httpservletResponse httpServletResponse, objeto o, modelandview modelandView) lanza una excepción {System.out.println ("First Interceptor Postthandle"); } @Override public void AfterComppletion (httpservletRequest httpservletRequest, httpServletResponse httpServletResponse, objeto o, excepción e) lanza excepción {System.out.println ("FirstInterceptor AfterCompletion"); }}PreHandle Devuelve verdadero antes de que continúe la siguiente ejecución.
Interceptor Registro:
paquete org.elvin.boot.interceptor; import org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.interceptoreGry RegisterInterceptor extiende WebMVCConfigurerAdapter {@Override public void AddInterceptors (InterceptorRegistry Registry) {Registry.AdDinterceptor (new FirstInterceptore ()); registro.addinterceptor (nuevo twointerceptor ()); registro.addinterceptor (nuevo tercerinterceptor ()); super.addinterceptors (registro); }}Para verificar la orden de ejecución, se usa thymeleaf aquí, y luego se accedió a las propiedades en el fondo en primer plano. Al acceder, la información se imprimirá en la consola
paquete org.elvin.boot.pojo; libro de clase pública {nombre de cadena privada; public String getName () {System.out.println ("Ver: Book'Name is" + Name); nombre de retorno; } public void setName (nombre de cadena) {this.name = name; }}Controlador:
paquete org.elvin.boot.controller; import org.elvin.boot.pojo.book; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestmapping;@controler@requestmapping ("primero") clase pública FirstController {private String ControllerPath = "Primero/"; @GetMapping ("índice") Public String Index (modelo modelo) {System.out.println ("Controlador: FirstController Index Doing ..."); Libro libro = nuevo libro (); book.setName ("Boot de primavera"); model.addattribute ("libro", libro); return ControllerPath + "índice"; }}Vista:
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"/> <title> title </title> </head> <body> <h1 th: text = "$ {book.name}"> </h1> </body> </html>Al acceder a Localhost: 8080/First/Index, la información de respuesta se generará en la consola.
De esta manera, se puede ver la orden de ejecución de un solo interceptor.
1. El método prehandilado ejecutado antes de ejecutar el método del controlador
2. Ejecutar el método de acción del controlador
3. Después de ejecutar la acción, antes de analizar la vista (si la hay), ejecute el método posterior al Interceptor del Interceptor
4. Analizar la vista
5. Después de analizar, ejecute el método AfterCompletion
Cuando se registran múltiples interceptores, la orden de ejecución es como se muestra en la figura.
2. Interceptor implementa la verificación del permiso
Del mismo modo, agregue el Interceptor de permiso primero
paquete org.elvin.boot.interceptor; import org.elvin.boot.annotation.nologin; import org.springframework.util.stringutils; import org.springframework.web.method.handlermethod; import org.springfringframe.web.servlet.handlerinterceptor; import org.springframework.web.servlet.modelandView; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession; public logininterceptor handterceptore @@operride PreHandle (HTTPServLetRequest Solicitud, respuesta httpservletResponse, mango de objeto) lanza la excepción {handlermethod método = (handlermethod) mango; Class <?> ControlerType = Method.getBeanType (); if (método.getMethodannotation (nologin.class)! = null || controlerType.getAnnotation (nologin.class)! = null) {return true; } Httpsession session = request.getSession (); String token = (string) session.getAttribute ("token"); if (! StringUtils.isEmpty (token)) {return true; } respuesta.sendedirect ("/login/index"); devolver falso; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpservletResponse, objeto o, excepción e) lanza la excepción {}}Luego registre el interceptor de permiso
paquete org.elvin.boot.interceptor; import org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.interceptoreGry RegisterInterceptor extiende WebMVCConfigurerAdapter {@Override public void addInterceptors (InterceptorRegistry Registry) {Registry.AdDinterceptor (new LoginInterceptore ()); super.addinterceptors (registro); }}Agregue un controlador de inicio de sesión al controlador, proporcione la página de inicio de sesión y el método de inicio de sesión
paquete org.elvin.boot.controller; import org.elvin.boot.annotation.nologin; import org.springframework.beans.factory.annotation.aUtowired; import org.springframework.sterotype.controller; import og.springframework.web.bind.annotation.getmapping; org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession;@nologin@controler@requestmapping ("login") clase pública logincontroller {@aUtowired httpservletRequest solicitud; @AUTOWIREDIRDIR PRIVADO HTTPSERVELTRESPOND RESPUESTA; String private ControllerPath = "Login/"; // @nologin @getmapping ("index") public string index () {httpsession session = request.getSession (); session.SetAttribute ("Token", "Token"); return ControllerPath + "índice"; } // @nologin @PostMapping ("Checkout") @ResponseBody public String checkout () {httpsession session = request.getSession (); session.SetAttribute ("Token", NULL); regresar "OK"; }}Aquí he hecho una anotación sin inicio de sesión, que se puede agregar al controlador o a la acción.
paquete org.elvin.boot.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.retention; import java.lang.annotation.retentionPolicy; import java.lang.annotation.target; @Target ({elementType.type, Elementtype.method}) @retención (retenciónPolicy.Runtime) public @Interface Nologin {}No se necesita contenido en la anotación.
Página de inicio de sesión (la página de inicio de sesión aquí es solo para inicio de sesión, por lo que después de visitar esta página, significa que el inicio de sesión es exitoso).
< th:src="@{/js/jquery-1.11.1.js}"></script><script th:inline="javascript"> $(function () { $(".container").delegate("#checkOut", "click", function () { $.ajax({ url: [[@{/login/checkOut}]], type: 'post', data: {}, éxito: funcional }); </script> </body> </html>Método de demostración de resultados:
En el navegador, primero abra el http: // localhost: 8080/login/índice, y luego acceda a http: // localhost: 8080/first/index página en la nueva pestaña.
Encontrará que al acceder a First/Index, puede acceder a él.
En este momento, en la página de inicio de sesión/índice, haga clic en el botón de inicio de sesión, actualice la primera/índice y saltará a la página de inicio de sesión directamente.
La explicación de ejemplo anterior del arranque de cadena e interceptor personalizado es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.