Use Filter en SpringBoot, use @WebFilter para configurar el uso y la atención

Introducción al
filtro El filtro también se llama filtro. Es la tecnología más práctica en la tecnología Servlet. Los desarrolladores WEB utilizan la tecnología Filter para interceptar todos los recursos web administrados por el servidor web: como JSP, Servlet, archivos de imágenes estáticas o archivos HTML estáticos. Para lograr algunas funciones especiales. Por ejemplo, realice algunas funciones avanzadas como el control de permisos a nivel de URL, el filtrado de palabras confidenciales y la compresión de la información de respuesta.
Principio de funcionamiento del filtro
Cuando el cliente envía una solicitud de recursos web, el servidor web verifica de acuerdo con las reglas de filtrado establecidas por el archivo de configuración de la aplicación. Si la solicitud del cliente cumple con las reglas de filtrado, la solicitud / respuesta del cliente se intercepta y el encabezado de la solicitud y los datos de la solicitud son interceptados Verifique o cambie, y pase a través de la cadena de filtros a su vez, y finalmente entregue la solicitud / respuesta al recurso web solicitado para su procesamiento. La información de la solicitud se puede modificar en la cadena de filtros o, según las condiciones, la solicitud no se envía al procesador de recursos y se envía una respuesta directamente al cliente. Cuando el procesador de recursos completa el procesamiento del recurso, la información de respuesta se devolverá paso a paso a la inversa. También en este proceso, el usuario puede modificar la información de respuesta para completar ciertas tareas.
Inserte la descripción de la imagen aquí
El servidor se ensamblará en una cadena en secuencia de acuerdo con la definición del filtro, y luego ejecutará el método doFilter () en él una vez. (Nota: Filter y Servlet son diferentes en este punto) El orden de ejecución es como se muestra en la figura a continuación, el código antes de chain.doFilter () del primer filtro se ejecuta y el código antes de chain.doFilter () del se ejecuta el segundo filtro, el código, el recurso solicitado, el código después de chain.doFilter () del segundo filtro, el código después de chain.doFilter () del primer filtro, y finalmente se devuelve la respuesta.
Inserte la descripción de la imagen aquí
SpringBoot usa @WebFilter para configurar el filtro
Paso 1: use @WebFilter para crear una clase de filtro

//@Component//无需添加此注解,在启动类添加@ServletComponentScan注解后,会自动将带有@WebFilter的注解进行注入!
@WebFilter(urlPatterns = "/lvjia/carbodyad/api/*", filterName = "rest0PubFilter")
@Order(1)//指定过滤器的执行顺序,值越大越靠后执行
public class Rest0PubFilter implements Filter {
    
    
 
    @Override
    public void init(FilterConfig filterConfig) {
    
    //初始化过滤器
         System.out.println("getFilterName:"+filterConfig.getFilterName());//返回<filter-name>元素的设置值。
         System.out.println("getServletContext:"+filterConfig.getServletContext());//返回FilterConfig对象中所包装的ServletContext对象的引用。
         System.out.println("getInitParameter:"+filterConfig.getInitParameter("cacheTimeout"));//用于返回在web.xml文件中为Filter所设置的某个名称的初始化的参数值
         System.out.println("getInitParameterNames:"+filterConfig.getInitParameterNames());//返回一个Enumeration集合对象。
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,             
         FilterChain filterChain) throws IOException, ServletException {
    
    
         if(false){
    
    
             response.sendRedirect("http://localhost:8081/demo/test/login");//重定向
         }
         filterChain.doFilter(servletRequest, servletResponse);//doFilter将请求转发给过滤器链下一个filter , 如果没有filter那就是你请求的资源
 
 } 
    @Override
    public void destroy() {
    
    
    }
 
}

@WebFilter Reglas de ruta de filtrado de URLPatterns de filtro de atributo común
Inserte la descripción de la imagen aquí
:

1. Concordancia de ruta completa: /abc/myServlet1.do
2. Concordancia de ruta parcial: / abc / *
3. Concordancia de comodines: / *
4. Concordancia de nombre de sufijo: * .do (Nota: No agregue / delante)
Nota

@WebFilter(urlPatterns = "/lvjia/carbodyad/api/*", filterName = "rest0PubFilter")

¡La primera letra de filterName debe estar en minúsculas! ! ! ¡minúscula! ! ! ¡minúscula! ! !
Paso 2: agregue la anotación @ServletComponentScan a la clase de inicio de la aplicación

@SpringBootApplication
@ServletComponentScan   //Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。
public class Application {
    
    
	public static void main(String[] args) {
    
    
		SpringApplication.run(Application.class, args);
	}
}

En este punto, está bien usar la anotación @WebFilter para configurar el filtro en SpringBoot. Es realmente rápido y conveniente. Además del método @WebFilter, también hay una forma de configurar el filtro usando spring @Bean, que se agregará la próxima vez.

Presta atención a mi cuenta pública de WeChat: Programa Yuan Weibo Más recursos te están esperando
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/CharlesYooSky/article/details/106239640
Recomendado
Clasificación