过滤器

Posted lemonzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过滤器相关的知识,希望对你有一定的参考价值。

1、过滤器

1) 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息。WEB资源可能包括Servlet、JSP、html页面等
2) 当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源作出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对响应信息做一些操作,然后再将响应发送给服务器。
3) 也就是说过滤器可以在WEB资源收到请求之前,浏览器收到响应之前,对请求和响应信息做一些相应的操作。
4) 在一个WEB应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求和响应必须在经过多个过滤器后才能到达目标

技术图片

2、过滤器的使用

1) 通过实现Filter接口完成过滤器的开发

package com.atguigu.login.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginFilter implements Filter {
    
    /**
     * 初始化方法
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("LoginFilter  初始化完成了.......");
    }
    
    /**
     * 真正的过滤处理
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        //当前的请求是谁
        HttpServletRequest req = (HttpServletRequest) request; 
        HttpServletResponse resp = (HttpServletResponse) response ;
        
        System.out.println("URI:" + req.getRequestURI());
        System.out.println("URL:" + req.getRequestURL());
        
        String url = req.getRequestURL().toString();
        //判断要过滤的请求
        if(url.endsWith("/main.jsp")) {
            //过滤  引导去往登录页面
            resp.sendRedirect("login.jsp");
        }else {
            //放行 继续执行后续的处理。
            //FilterChain: 过滤器链对象
            chain.doFilter(req, resp);
        }
    }
    /**
     * 销毁方法
     * 
     */
    @Override
    public void destroy() {
        System.out.println("LoginFilter 销毁了......." );
    }
    
    
}

2)Filter在web.xml中的配置

  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.atguigu.login.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 

以上是关于过滤器的主要内容,如果未能解决你的问题,请参考以下文章

基于内部片段的graphql过滤器(gatsbyJS)

js简洁代码片段

在底部导航栏中保存片段状态

在Pandoc lua过滤器中连接字符串片段

过滤作为 ViewPager 片段一部分的 ListView

CPNtools协议建模安全分析---实例变迁标记