Filter过滤器

过滤器:拦截请求,对请求进行一些特殊操作
作用:一般用于一些通用的操作 如:登录验证、统一编码处理,敏感字符过滤

ps:本质为一个servlet,配置的为拦截路径,导包时导入javax.servlet

配置方法:

  1. 注解配置:@webFilter("/*") //访问所有资源都要经过该过滤器,参数结构与servlet相同
  2. web.xml配置:
<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>cn.itcast.web.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

执行流程和生命周期

  • 执行流程:浏览器发送请求->第一次通过过滤器发送至资源页面(增强请求消息,响应消息为空)->执行放行(chain.doFilter(myRequest,response);)->第二次通过过滤器发送至浏览器(增强响应消息)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		/*
		*第一次通过时执行,用于增强请求消息
		*/
		
		chain.doFilter(myRequest,response); //执行放行代码,请求资源

		/*
		*第二次通过时执行,用于增强响应消息
		*/
	}
	
  • 生命周期:
public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		/*
		*服务器启动时创建过滤器对象并调用该方法(用于加载资源)
		*/
	}
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		/*
		*服务器关闭时销毁过滤器对象并调用该方法(用于释放资源)
		*正常关闭时才会被调用,非正常关闭时不会被调用
		*/
	}

	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		/*
		*过滤器
		*/
	}
	

拦截路径

  • 路径写法:1、具体资源路径拦截:/index.jsp(只有在访问该路径资源时过滤器才会被执行)
    2、目录拦截:/user/* (访问/user下的所有资源时过滤器会被执行)
    3、文件后缀名拦截:*.do(访问所有后缀名为do的资源文件时过滤器会被执行)

  • 拦截方式配置
    资源被访问时通过对访问的方式进行过滤器拦截(浏览器直接访问,转发等)

    • 注解配置:
      设置dispatcherTypes属性
      参数:1、REQUEST:默认值,浏览器直接请求
      2、FORWARD:转发访问资源
      3、INCLUDE:包含访问资源
      4、ERROR:错误跳转资源
      5、ASYNC:异步访问资源(ajax)
@WebFilter(value="/Filter1",dispatcherTypes=DispatcherType.REQUEST)
	* web.xml配置
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<dispather>REQUEST</dispather>
	<url-pattern>/*</url-pattern>
</filter-mapping>

过滤器链

  • 执行顺序:过滤器1>过滤器2>放行>过滤器2>过滤器1(个人感觉有点像进栈出栈)
  • 过滤器先后顺序
    • 注解配置:根据类名的字符串比较大小规则,值小的优先执行
      比如AFilter和BFilter两个过滤器AFilter先执行
    • web.xml:谁定义在上面谁先执行

过滤敏感字符用到了代理模式,并不是很理解,等之后再重新理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值