主要功能:
用户权限控制:URL级别权限访问(超级管理员、普通员工)
压缩响应信息:对申请资源的打包压缩,节省流量;
未登录过滤:URL过滤,过滤无效请求;未登录访问拦截;
将编码集的单件套写在过滤器,就不用servlet每个都写了;
过滤敏感词汇,特殊字符,*&等;
使用:三层过滤:1、三件套过滤 2、密码账号验证 3、特殊字符过滤; 考虑过滤顺序;
过滤请求,*.jsp过滤所有jsp;
过滤器执行流程:
所有符合过滤器的请求,进来会执行一段代码;
判断是否进入目标资源,进入目标处理业务;
返回过滤器在执行一段代码;
过滤器的生命周期:
容器启动的时候,容器读取web.xml 找到过滤器配置创建实例
调用init()方法做初始化; 创建:init(confing)
满足过滤器的请求都经过doFilter方法
关闭容器,销毁Filter; 销毁:关闭服务器的时候销毁。
过滤器:
1、首先实现Filter(javax.servlet)接口,WEB开发人员可以通过过滤器对WEB资源进行管理;
过滤器要专门用一个包,【servlet是继承方法】;
2、实现方法:建立-过滤-销毁
形参:请求、响应、FilterChain;FilterChain:进行拦截;请求和响应不是http请求,只能处理普通的请求;
3、去xml中去配置,配置才能在内存实例化,让容器管理他; 映射URL地址,
映射中设置权限过滤条件:
/*所有都要经过过滤
*.jsp 过滤所有jsp文件;
/servlet/* 表示过滤servlet文件夹内的文件。
配置不进行过滤的页面: 登录jsp不拦截,session也不能拦截,验证码不拦截
<init-param>
<param-name>NotFilterList</param-name>
<param-value>/login.jsp,/LoginServlet,/ImageCodeServlet</param-value>
<init-param>
默认过滤Request请求,内部派发不进行过滤;内部包含请求不被过滤(forword,include)
<dispatcher>REQUEST</dispatcher>:过滤用户直接访问的过滤器,WEB调用过滤器;
<dispatcher>FORWORD</dispatcher>:只有通过forword内部派发的才会进入过滤;
<dispatcher>INCLUDE</dispatcher> 过滤包含的请求;
<dispatcher>用于拦截资源被servlet所调用的方式;
在过滤器中增加编码集配置;
4、FilterChain控制请求,filterChain.doFilter(req,resp);
调用doFilter才会达到请求的目标资源;
配置多个过滤器:
1、字符集强转器:charcodefilter中实现方法;如何过滤servlet,所有servlet加一个文件夹,配置的时候就过滤这个文件夹; /servlet/* 表示过滤servlet文件夹。
过滤器链:web开发中,开发多个过滤器,过滤器组合起来就是过滤器链;
1、多过滤器的执行顺序:按照在xml中配置的顺序有关,先注册先执行,(与过滤条件无关)后注册后进入;
2、第一个过滤器执行过程中,chain.doFilter会在去找当前目标程序还有没有经过其他过滤器。没有就直接进入目标,如果目标还有第二个过滤器,那么就进入第二个过滤器;嵌套执行;