Una nota sobre los filtros de Java

Todo el mundo sabe que hay filtros interceptores y oyentes en Java. Las funciones de los filtros y los interceptores son muy similares. Como resultado, los principiantes a menudo no saben cuál usar, así que introduzcamos la diferencia entre los dos primero.

La diferencia entre filtro e interceptor:

1. El filtro se basa en devoluciones de llamada de funciones y el interceptor se basa en el mecanismo de reflexión de Java;

2. El filtro está especificado por la especificación del servlet y solo se puede usar en programas web, mientras que el interceptor está en el contenedor de resorte, que no depende del contenedor del servlet.

3. El filtro puede interceptar casi todas las solicitudes (incluidas las solicitudes de recursos estáticos), mientras que el interceptor solo intercepta solicitudes de acción (no intercepta solicitudes de recursos estáticos)

4. Los filtros no pueden acceder a los objetos en el contexto de la acción y la pila de valores, mientras que los interceptores son todos posibles.

5. Los interceptores pueden obtener objetos en el contenedor de resorte, pero los filtros no

6. El interceptor se puede llamar varias veces durante el ciclo de vida de la acción, mientras que el filtro solo se llama una vez cuando se inicializa el contenedor.

7. El interceptor está envuelto en un filtro.

Los filtros en realidad interceptan los recursos web, realizan algún procesamiento y luego los pasan al siguiente filtro o servlet para su procesamiento.
Por lo general, se utilizan para interceptar la solicitud para su procesamiento, y la respuesta devuelta también puede ser interceptada.

Todo el proceso de solicitud es el siguiente (aquí se cita de http://blog.csdn.net/chenleixing/article/details/44573495 imágenes del blog):
Inserte la descripción de la imagen aquí

Los pasos específicos para configurar filtros en java
Primero crean una carpeta de filtros y crean un tipo de clase LoginFilter.class en ella
Inserte la descripción de la imagen aquí

Heredar la interfaz de filtro y reconstruir el método doFilter

public class LoginFilter implements Filter {
    
    

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    
        // 过滤器出生
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
    
        //强转
        HttpServletRequest request=(HttpServletRequest) servletRequest;
        HttpServletResponse response=(HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        if (session.getAttribute("userInfo")!=null && request.getRequestURL().indexOf("/userInfoController/doLogin.do")!=-1){
    
    

                //登陆成功
            filterChain.doFilter(request,response);
            }else {
    
    
            response.sendRedirect(request.getContextPath()+"//userInfoController/doLogin.do");
        }
    }

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

Dado que el filtro existe en el servlet, está configurado en web.xml.

<!--使用filter过滤器-->
  <filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>com.zrgj.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

  使用springSecurity过滤器
  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

Supongo que te gusta

Origin blog.csdn.net/hzl529/article/details/102667386
Recomendado
Clasificación