过滤器的使用

1、简介

需要统一处理一些请求或者相应的操作
过滤器:filter
过滤器本质上就是一个servlet,本身就是一个特殊的servlet。
在这里插入图片描述

2、创建过滤器

写一个类,实现Filter,接口,实现Filter中的三个方法

  • init
  • doFilter
  • destroy
    在这里插入图片描述
    在这里插入图片描述
    MyFilter 类
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.annotation.WebFilter;
//@WebFilter("/*")
public class MyFilter implements Filter {
    
	/**
	 * 初始化方法
	 */
	@Override
	public void init(FilterConfig config) throws ServletException {
		System.out.println("只会触发一次,而且是第一次");

	}
	
	

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
	         System.out.println("请求之前我们需要做的,过滤在进入servlet之前");  //客户端请求到服务端请求的时候
             //继续放行
	         chain.doFilter(req, resp);//正常情况下,这个方法一定要写,不然相当于把客户端请求打回去了,使不能进入servlet
	         
	         System.out.println("请求响应后的操作");//服务端--客户端
	}

	
	@Override
	public void destroy() {
           System.out.println("只会触发一次,服务器停止运行时销毁资源");
	}
	

}

MyServlet类

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = {"/us","/ua"},initParams = {
		@WebInitParam(name="age",value = "16"),
		@WebInitParam(name="gender",value = "男")
})
public class MyServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	this.doGet(req, resp);
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	System.out.println("Hellow world");
    }
}

在这里插入图片描述
如果在doFilter()方法中不加放行的效果
chain.doFilter(req, resp);
访问不到servlet在这里插入图片描述

3、过滤器的配置

和servlet保持相同
Filter配置文件

<filter>
         <filter-name>MyFilter</filter-name>
         <filter-class>com.oplab.servlet.filter.MyFilter</filter-class>
  </filter>
  
  <filter-mapping>
          <filter-name>MyFilter</filter-name>
          <!-- /*表示拦截所有请求 -->
          <url-pattern>/*</url-pattern>
  </filter-mapping>

Filter的注解

@WebFilter("/*")

web.xml配置初始化参数(有参数建议使用这个)

<servlet>
      <servlet-name>Myservlet</servlet-name>
      <servlet-class>com.oplab.servlet.filter.MyServlet</servlet-class>
      <init-param>
            <param-name>age</param-name>
            <param-value>16</param-value>
      </init-param>
      <init-param>
            <param-name>gender</param-name>
            <param-value>男</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>Myservlet</servlet-name>
      <url-pattern>/ma</url-pattern>
  </servlet-mapping>

注解配置初始化参数

 @WebServlet(urlPatterns = {"/us","/ua"},initParams = {
		@WebInitParam(name="age",value = "16"),
		@WebInitParam(name="gender",value = "男")
})

4、Filter的使用场景

  1. 权限过滤
  2. 编码过滤
  3. 认证过滤

  4. 如果需要对一系列请求需要操作的时候,建议使用filter统一操作
    通用过滤器post请求中文乱码问题
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.annotation.WebFilter;

public class CharacterEncodingFilter implements Filter {
    private String encoding;
	public void init(FilterConfig fConfig) throws ServletException {
		encoding=fConfig.getInitParameter("encoding");
		if(encoding==null||"".equals(encoding.trim())) {
			encoding="utf-8";
		}
	}
	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		//将请求头响应的编码默认设置
		request.setCharacterEncoding("encoding");
		response.setCharacterEncoding(encoding);
		chain.doFilter(request, response);
		//response.setContentType("text/html;charset=utf-8");
	}

	public void destroy() {
		
	}
}

配置文件

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>com.oplab.servlet.filter.CharacterEncodingFilter</filter-class>
      <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
      </init-param>
  </filter>   
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
捕获过滤器是一种用于限制和筛选网络流量的工具。它可以根据特定的条件来捕获和显示网络数据包,以便进行分析和故障排除。 捕获过滤器通常用于网络分析和安全监控,可以帮助管理员识别网络中的异常流量、攻击行为或者故障情况。它可以根据源IP地址、目标IP地址、端口号、协议类型等条件来过滤和捕获特定的数据包。 使用捕获过滤器时,需要指定过滤条件,并将其应用于网络接口或者特定的数据包捕获工具(如Wireshark)。捕获过滤器使用一种特定的语法来描述过滤条件,常用的语法包括: 1. IP地址过滤:可以使用源IP地址或目标IP地址来过滤数据包。例如,过滤源IP地址为192.168.1.1的数据包:`src host 192.168.1.1`。 2. 端口号过滤:可以使用源端口号或目标端口号来过滤数据包。例如,过滤目标端口号为80的数据包:`dst port 80`。 3. 协议类型过滤:可以使用协议类型(如TCP、UDP)来过滤数据包。例如,过滤TCP协议的数据包:`tcp`。 4. 逻辑运算符:可以使用逻辑运算符(如and、or、not)来组合多个过滤条件。例如,过滤源IP地址为192.168.1.1且目标端口号为80的数据包:`src host 192.168.1.1 and dst port 80`。 显示过滤器是捕获过滤器的一种扩展,用于在捕获的数据包中进行进一步的筛选和显示。它可以根据数据包的内容、协议字段等条件来过滤和显示特定的数据包。 使用显示过滤器时,需要在捕获工具中指定过滤条件,并将其应用于已捕获的数据包。常用的显示过滤器语法与捕获过滤器类似,可以根据需要进行组合和筛选。 总结一下,捕获过滤器用于限制和捕获特定条件的网络数据包,而显示过滤器用于在已捕获的数据包中进一步筛选和显示特定的数据包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值