Filtro y escucha de JavaWeb

Filtro y escucha de JavaWeb

Filtro: filtrar

Proceso de implementación:

Instrucciones:

Configuración de filtro detallada

Oyente: oyente

Mecanismo de seguimiento de eventos

ServletContextListener

Instrucciones:

Caso de interceptación de inicio de sesión mediante filtro


Filtro: filtrar

      Filtro: Al acceder a los recursos del servidor, el filtro puede interceptar la solicitud y realizar algunas funciones especiales. Generalmente se usa para completar operaciones comunes. Tales como: verificación de inicio de sesión, procesamiento de codificación unificado, filtrado de caracteres sensibles ...

      El filtro es equivalente a un filtro entre el navegador y el recurso Web. Antes de acceder al recurso, la solicitud se modifica, juzga e intercepta a través de una serie de filtros, y la respuesta también se puede modificar, juzgar e interceptar.

Proceso de implementación:

  1. El cliente envía una solicitud, primero pasa por el filtro, si el filtro está permitido, luego puede ir al servlet

  2. Si hay varios filtros, se pondrán en cola de acuerdo con el orden de asignación registrado. Mientras haya un filtro que no esté permitido, los filtros posteriores y nuestro servlet no recibirán la solicitud.

Cómo utilizar :

        1. Defina una clase que implemente la interfaz Filter.

        2. Reescribe el método (ejecuta la acción de interceptación)

        3. Configure la ruta de interceptación: use la anotación @WebFilter o web.xml

@WebFilter("/*")//访问所有资源之前,都会执行该过滤器
public class FilterDemo1 implements Filter {
       @Override
       public void init(FilterConfig filterConfig) throws ServletException {
            //过滤器初始化的方法,一般用于申请资源
            // init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
       }
            
       @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
           //执行拦截的动作,具体的拦截逻辑写在这里  
           //doFilter:每一次请求被拦截资源时,会执行。执行多次         
           System.out.println("filterDemo1被执行了....");
            
           //放行
           filterChain.doFilter(servletRequest,servletResponse);
            
       }
            
       @Override
       public void destroy() {
            //过滤器销毁的方法,一般用于释放资源
            //destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
       }
}

Configuración de filtro detallada

       Configuración de la ruta de interceptación:

                1.  Ruta de recurso específica: /index.jsp El filtro solo se ejecutará cuando se acceda al recurso index.jsp

                2.  Directorio de intercepción: / usuario / * Al acceder a todos los recursos en / usuario, se ejecutará el filtro

                3.  Intercepción de nombre de sufijo: * .jsp Al acceder a todos los recursos con el nombre de sufijo jsp, se ejecutará el filtro

                4.  Interceptar todos los recursos: / * Cuando se acceda a todos los recursos, se ejecutará el filtro

Oyente: oyente

Un componente especial definido en la especificación de Servlet se utiliza para escuchar los eventos generados por el contenedor de Servlet y procesarlos en consecuencia.

Mecanismo de seguimiento de eventos

            * Evento: una cosa

            * Fuente del evento: el lugar donde ocurrió el evento.

            * Oyente: un objeto

            * Oyente registrado: vincule el evento, la fuente del evento y el oyente juntos. Cuando ocurre un evento en la fuente del evento, ejecute el código de escucha

ServletContextListener

           El ServletContextListener será notificado cuando se cree y cierre el ServletContext.

           El oyente debe configurarse en web.xml.

Cómo utilizar :

           1. Defina una clase que implemente la interfaz ServletContextListener.

           2. Método de reescritura.

           3.Haz la configuración

 

ServletContextListener:监听ServletContext对象的创建和销毁
* 方法:
      * void contextDestroyed(ServletContextEvent sce) :ServletContext对象被销毁之前会调用该方法
      * void contextInitialized(ServletContextEvent sce) :ServletContext对象创建后会调用该方法

Caso de interceptación de inicio de sesión mediante filtro

@WebFilter("*.jsp")
public class FilterTest1 implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        //判断是否已经登录了,如果没有登录就需要跳转到登录界面,但是如果访问的资源路径本来
        //就是登录页面,那么就不需要拦截了,这里需要进行判断排除

        //记得强制转型
        HttpServletRequest request = (HttpServletRequest)req ;

        //获取session对象,看看对应的属性是否有值
        HttpSession session = request.getSession();
        Object  login = session.getAttribute("login");

        //获取url路径,看看里面是否是登录资源相关的
        String requestURI = request.getRequestURI();

        //在过滤掉登录相关时,一定要排除一些js,css文件
        if (login != null || requestURI.contains("/longin.jsp") || requestURI.contains("/css/") ||
                requestURI.contains("/js/") || requestURI.contains("/fonts/") ) {
            chain.doFilter(req, resp);
        } else {
            request.getRequestDispatcher("/longin.jsp").forward(request, resp);
        }
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

No es fácil de crear. Si este blog es útil para usted, recuerde dejar un mensaje + me gusta. 

Supongo que te gusta

Origin blog.csdn.net/promsing/article/details/114438925
Recomendado
Clasificación