JAVAWEB之Filter过滤器

Filter也称过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web服务管理的所有web资源进行拦截例如(jsp servlet html等)可以实现不同权限对不同资源的访问与修改等功能,例如:教务管理系统中,学生只能访问与学生有关的资源。而老师可以对学生的成绩进行增删改查。
过滤敏感词汇,压缩响应信息等功能。
在这里插入图片描述①编写JAVA类实现javax.servlet中的Filter接口,重写doFilter方法。具体的写方法。②在Web.xml文件中对编写的filiter类进行注册,并设置它所能拦截的资源。//doFilter中的FilterChain相当于拦截器的转发。
< filter>
< filter-name>Filter这个类的类名< /filter-name>
< filter-class>Filter这个类的包全名< /filter-class>
< /filter>
< filter-mapping>
< filter-name>Filter这个类的类名< /filter-name>
< url-pattern>/*< /url-pattern> //拦截的web工程下的那个请求的url
< dispatcher> request< /dispatcher> //指定拦截的请求类型(request forword等等)可以有多个;
< /filter-mapping>

Filter的生命周期(Filter的创建和销毁由web服务器控制)①服务器启动的时候,web服务器创建Filter的实例对象,并调用其init方法,完成对象的初始化功能。filter对象只会创建一次,init方法也只会执行一次。②拦截到请求时,执行doFilter方法。可以执行多次。③服务器关闭时,web服务器销毁Filter的实例对象,调用destory方法。

拦截之后一定不要忘记使用 FilterChain 的 doFilter(req,res)方法进行放行。
Filter的功能:
①Filter禁用缓存:
做一个Filter实现:resp.setHeader(“Cache-Control”,“no-cache”); resp.setHeader(“Pragma”, no-cach"); resp.setDateHeader(“Expires”,-1); chain.doFilter(req,resp); 这三个方法。
接下来就在web.xml中配置。
②利用Filter实现验证登录后跳转的url。例如:在doFilter()方法中写入如下功能:
String path=req.getServletPath().subString(1);//得到url中访问某个servlet的名字(例如:login.udo)
String autho=req.getFilterConfig().getInitParameter(“authority”)//得到初始化配置中的authority的值
String[] strArry=autho.split(",")//将autho字符串分割成字符数组。
HttpSession session=req.getSession();//拿到session对象。
for(String str:strArry){ //for each 循环遍历这个strArry()字符数组,目的是为了找到之前在Session中设置的用户记录。如果找到,说明该用户之前登录过,则放行登录。
if(str.equals(path)){
String username=(String)session.getAttribute(“user”);
if(username!=null && username!="")//如果找到之前设进的username则让该请求正常跳转。
{
FilterChain chain.doFilter(req,res)
}else{//否则说明没有该用户没有经过正常登录,则跳转到登录页面
resp.sendRedirect(req.getContextPath()+"/login.jsp");

}

}

}

同样的方法在web.xml配置文件中配置相应的不需要权限的servlet的名称并在Filte类过滤器中加入不需要权限的页面的名称,同理设置它们的跳转直接放行
配置过滤器的方法:
1 注解:直接在过滤器类上添加注解:@WebFilter 例如:@WebFilter("/")//表示,访问所有资源之前,都会执行该过滤器。
2XML配置:例如:
< filter>
< filter-name>demo1</ filter-name>
< filter-class>cn.itcast.web.filter.FilterDemo1< /filter-class>
< /filter>
< filter-mapping>
< filter-name>demo1< /filter-name>
< url-pattern>/
< /url-pattern>
< /filter-mapping>
5过滤器链(配置多个过滤器):
执行顺序:如果有两个过滤器:过滤器1和过滤器2
假设 过滤器1先执行那么他们的执行顺序如下:
过滤器1
过滤器2

  	   	            过滤器2
  	   	            过滤器1
  	   	    过滤器先后顺序问题:
  	   	    		1注解配置:按照过滤器的类名,之间进行字符串的比较,小的先执行。例如:AFilter 和 BFilter ,那么就先执行 AFilter (注意:字符串的比较规则:从左到右一个一个字符的比较,相同位置的字符哪个小,那个字符串就小。)	 
  	   	    		2 XML文档的配置:根据,< filter-mapping>的先后,配置在前面的Filter先被执行。

2 过滤器执行的流程:
1 执行过滤器
2 执行放行后的资源
3 回来执行过滤器放行代码下边的代码
3 过滤器生命周期方法:
1 init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源。
2 doFilter:每一次请求被拦截资源时,会执行。执行多次。
3 destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源。
4 过滤器配置详解:
拦截路径配置:
1 具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
2 拦截目录:/user/* 访问/user下的所有资源时,过滤器都会被执行
3 后缀名拦截: .jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
4 拦截所有资源:/
访问所有资源时,过滤器都会被执行
5 拦截方式配置:资源被访问的方式
* 注解配置:
* 设置dispatcherTypes属性
* 1REQUEST:默认值。浏览器直接请求资源
* 2 FORWARD:转发访问资源
* 3 INCLUDE:包含访问资源
* 4 ERROR:错误访问资源
* 5 ASYNC:异步访问资源
XML文档的方式:
< dispatcher>上面五个值< /dispatcher>
过滤器验证登陆权限案例:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_43557743

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值