web 过滤器 Filter

(34) 2023-09-28 13:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说web 过滤器 Filter,希望能够帮助你!!!。

介绍

生活中的过滤器比如:净水器,空气净化器,渔网,烟嘴等等;

我们在 web 中的过滤器:Filter 过滤器,可以实现用户在访问某个目标资源之前,对访问的请求响应进行拦截

简单的来说就是可以实现 web 容器对某资源的访问前截获进行相关的处理,还可以在某资源向 web 容器返回响应前进行截获进行处理;

比如:拦截与修改 我们的请求与响应,过滤掉敏感字符等等


过滤器编写

第一种实现 Filter 接口,并实现接口中的方法

/**
 * @author laonian
 * @date 2021-12-09 22:31
 */
public class FirstFilter implements Filter {

    public FirstFilter() {

    }
    
	@Override
	public void init(FilterConfig fConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("请求1");
		chain.doFilter(request, response);
		System.out.println("响应1");
	}
	
	@Override
	public void destroy() {

	}
}

第二种 在 web.xml 中配置 或者使用注解配置

  <filter>
  	<filter-name>first</filter-name>
  	<filter-class>cn.itsource.filter.FirstFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>first</filter-name>
  	<url-pattern>/index.jsp</url-pattern>	
  </filter-mapping>
@WebFilter("/*")
public class FirstFilter implements Filter {
    public FirstFilter() {
    }
	public void destroy() {
	}
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("请求");
		chain.doFilter(request, response);
		System.out.println("响应1");
	}
	public void init(FilterConfig fConfig) throws ServletException {
	}
}

过滤器的生命周期

创建 > 初始化 > 执行(每次过滤都执行) > 销毁 (正常关闭时)

web 过滤器 Filter_https://bianchenghao6.com/blog__第1张


FilterConfig

servlet 容器使用的过滤器配置对象,该对象在初始化期间将信息传递给过滤器

示例

	@Override
	public void init(FilterConfig config) throws ServletException {
		//取到 filterName     返回此过滤器的过滤器名称
		String filterName = config.getFilterName();
		// 得到 filter 里面 init-param 参数配置
		String encoding = config.getInitParameter("encoding");
		System.out.println(encoding);

		//得到 filter 里面所有信息    返回包含指定初始化参数的值的 String,如果参数不存在,则返回 null
		Enumeration<String> names = config.getInitParameterNames();
		//以 String 对象的 Enumeration 的形式返回过滤器初始化参数的名称,如果过滤器没有初始化参数,则返回一个空的 Enumeration。
		while (names.hasMoreElements()){
			String name = names.nextElement();
			System.out.println(config.getInitParameter(name));
		}

		System.out.println("过滤器初始化操作");
	}

过滤器过滤配置

过滤器默认只拦截一次请求级别,实际上过滤器将过滤的请求情况分为四类

【request - 请求】【forward - 转发】【include - 包含】【error - 错误】

针对上面分类进行过滤请求,需要在 <filter-mapping> 的 <dispatcher> 节点中配置上对应的情况

<dispatcher>的配置:
* REQUEST	:默认值
* FORWARD	:转发
* INCLUDE		:包含
* ERROR		:错误页面跳转.(全局错误页面)

请求转发

web 过滤器 Filter_https://bianchenghao6.com/blog__第2张

web 过滤器 Filter_https://bianchenghao6.com/blog__第3张

web 过滤器 Filter_https://bianchenghao6.com/blog__第4张

web 过滤器 Filter_https://bianchenghao6.com/blog__第5张


请求重定向

web 过滤器 Filter_https://bianchenghao6.com/blog__第6张



web 过滤器 Filter_https://bianchenghao6.com/blog__第7张

顺手点个赞呗!~

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复