Filter(过滤器)

与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序中,但是与其他web应用程序组件不同的是,过滤器是链在容器的处理过程中的,这就意味着他们会在servlet处理器之前访问一个进入的请求,并且在外发响应信息返回到客户前访问这些响应信息,这种访问使过滤器可以检查并修改请求和响应的内容

两个过滤器,EncodingFilter负责设置编码,SecurityFilter负责控制权限,服务器会按照web.xml中过滤器定义的先后顺序组成一条链,然后一次执行其中的doFilter()方法,

顺序:  执行第一个过滤器的chain.doFilter()之前的代码->第二个过滤器的chain.doFilter()之前的代码,请求的资源->第二个过滤器的chain.doFilter()之后的代码->第一个过滤器的chain.doFilter()之后的代码,最后返回响应

    在调用servlet的service()方法之前,容器会先创建一个filterchain,并把servlet传入这个filterchain对象,作为其内部参数。
创建这个filterchain的时候,会根据请求的uri,把符合条件的filter加入到这个chain里。紧接着就调用这个filterchain的doFilter方法。
这个filterchain的doFilter方法就会按顺序(在web.xml定义的顺序)调用各个filter的doFilter方法。当所有的filter的doFilter方法都调用完以后,才会调用servlet的service方法。

service方法调用结束后会返回上一次的chain.doFilter方法,并执行doFilter方法后面的代码。接着,返回上上一个chain.doFilter方法

因此,我们的Filter都是在chain.doFilter方法调用之前来处理request请求,在chain.doFilter方法调用之后处理response响应。


过滤链的好处是执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容.

实际使用时,要注意执行顺序问题,EncodingFilter一定要放在所有Filter之前,才能确保在使用请求中的数据前设置正确的密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值