interceptores, filtros, oyentes y procesos de ejecución de springbboot

Proceso de implementación

El filtro se preprocesa después de que la solicitud ingresa al contenedor pero antes de que la solicitud ingrese al servlet. Lo mismo ocurre con la devolución después de que se completa la solicitud: después de que se procesa el servlet y antes de que se devuelva al front-end.

Insertar descripción de la imagen aquí
La solicitud ingresa al contador como se muestra arriba y luego regresa después de la ejecución.

Filtrar:

Un filtro es un componente definido en la especificación de Servlet que se puede utilizar para preprocesar o posprocesar solicitudes antes de que ingresen a una aplicación web o antes de que una respuesta abandone una aplicación web. Los filtros se aplican configurándolos en web.xml o anotaciones de Servlet.

Flujo de ejecución:
la solicitud ingresa al contenedor web → el filtro preprocesa la solicitud → la solicitud se pasa al siguiente filtro o servlet de destino → el filtro procesa la respuesta antes de salir del contenedor web.

Interceptador:

Un interceptor es un componente proporcionado por el marco Spring que se puede usar para ejecutar lógica personalizada antes de que la solicitud ingrese al controlador (Controlador) o antes de que se represente la vista. El interceptor se aplica implementando la interfaz HandlerInterceptor y registrándola en el contenedor Spring.

Flujo de ejecución:
la solicitud ingresa a DispatcherServlet → El interceptor preprocesa la solicitud → La solicitud se pasa al siguiente interceptor o controlador → El controlador procesa la solicitud → Representa la vista → El interceptor posprocesa la respuesta.

Oyente:

Un oyente es un componente definido en la especificación de Servlet que se puede utilizar para monitorear eventos en aplicaciones web, como el inicio de la aplicación, la llegada de solicitudes, la creación y destrucción de sesiones, etc. El oyente se aplica configurándolo en web.xml o anotaciones de servlet.

Proceso de ejecución:
el oyente se registra en el contenedor web → el oyente monitorea la ocurrencia de eventos específicos y ejecuta la lógica correspondiente.

Uso de interceptores

Cree una clase de interceptor:
primero, debe crear una clase de interceptor que implemente la interfaz HandlerInterceptor. Esta interfaz define métodos que se ejecutan en diferentes etapas del procesamiento de la solicitud, como antes de la solicitud, después de que se procese la solicitud y después de que se complete la solicitud.

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CustomInterceptor implements HandlerInterceptor {
    
    

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        // 在请求之前执行的逻辑
        return true; // 返回true继续执行请求,返回false中断请求
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
    
        // 在请求处理之后执行的逻辑
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
    
        // 在请求完成之后执行的逻辑
    }
}

Registre el interceptor:
a continuación, debe registrar el interceptor en la aplicación Spring Boot. Este paso se puede lograr creando una clase de configuración y registrando interceptores usando el método addInterceptors() de la interfaz WebMvcConfigurer.

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    
    

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
    
        registry.addInterceptor(new CustomInterceptor())
                .addPathPatterns("/**"); // 可以指定拦截的路径,例如 "/api/**"
    }
}

Uso de filtros

Cree una clase de filtro:
cree una clase de filtro que implemente la interfaz javax.servlet.Filter para implementar la lógica del filtro.

import javax.servlet.*;
import java.io.IOException;

public class CustomFilter implements Filter {
    
    

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    
        // 初始化过滤器(可选)
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
        // 过滤逻辑
        chain.doFilter(request, response); // 传递请求给下一个过滤器或目标Servlet
    }

    @Override
    public void destroy() {
    
    
        // 销毁过滤器(可选)
    }
}

Registre un filtro:
en un proyecto Spring Boot, puede usar la anotación @WebFilter para registrar un filtro. Agregue esta anotación en la clase a la que desea aplicar el filtro y establezca el patrón de URL del filtro.

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@Component
@WebFilter(urlPatterns = "/api/*") // 指定过滤的URL模式
@Order(1) // 指定过滤器顺序
public class CustomFilter implements Filter {
    
    

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    
        // 初始化过滤器(可选)
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
        // 过滤逻辑
        chain.doFilter(request, response); // 传递请求给下一个过滤器或目标Servlet
    }

    @Override
    public void destroy() {
    
    
        // 销毁过滤器(可选)
    }
}

Inicio de la aplicación:
al iniciar la aplicación Spring Boot, los filtros se registran y aplican automáticamente al patrón de URL correspondiente.

Tenga en cuenta que cuando utilice anotaciones para registrar filtros, debe asegurarse de que la anotación @ServletComponentScan se agregue a la clase principal de Spring Boot para escanear y cargar la anotación @WebFilter.

De esta manera puede utilizar el filtro en su proyecto Spring Boot. Los filtros se pueden utilizar en varios escenarios, como registro de solicitudes, configuración de codificación de caracteres, verificación de seguridad, etc. Dependiendo de sus necesidades, puede escribir la lógica correspondiente en el método doFilter() del filtro.

Supongo que te gusta

Origin blog.csdn.net/wang121213145/article/details/131619563
Recomendado
Clasificación