一.是什么
1.概述
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理;
可以选择拦截下什么资源,放行什么资源;
程序是每一个过滤器都会经过,但不一定会拦截。
2.图解
二.为什么用
1.用来过滤网站的数据,减少代码量,如处理中文乱码,登录验证,还比如网站写骂人的话会变成***就是用Filter是实现的
2.Filter和servlet一样,都是需要拿到request和response的,只不过servlet使用是通过实现servlet接口,Filter的使用是实现过滤器filter接口
3.总结:
应用场景
自动登录
统一设置编码格式
访问权限控制
敏感字符过滤等
三.怎么用
1.回忆servlet处理中文乱码
<1>编写servlet
<2>注册servlet并编写mapping
<3>部署tomcat
<4>测试访问
2.代码实现
<1>创建普通maven项目,使用javaToWeb转为web项目
<2>pom文件导入依赖
<3>编写Filter并与servlet对比
I.实现filter接口,注意导的包
II.重写方法
III.与servlet对比
<4>在web.xml配置Filter
<5>配置tomcat并测试访问
发现只有在/servlet下的路径才会处理乱码,注意平常尽量写多个filter-mapping
3.Filter接口的生命周期
重写方法的生命周期
<1>.init()
初始化的时候可以搭建监听日志,比如通过拿到应用上下文对象设置属性,因此我们可以在服务器一启动的时候设置固有的属性,让所有人可以访问
<2>.doFilter()
<3>.destory()
web服务器停止的时候,过滤器才会销毁
四.Filter实现权限拦截
1.需求:
用户登录以后才能进入主页,用户注销后就不能进入主页了
思路:
<1>用户登录之后,向session中放入用户的数据
<2>进入主页的时候要判断用户是否已经登录,要求在Filter中实现
2.代码实现
<1>编写登录成功主页面
<2>编写登录页面
<3>编写错误页面
<4>创建工具包,编写放常量的类
<5>编写登录与注销的servlet
<6>编写过滤器Filter
<7>在web.xml中配置servlet和filter
<8>访问
3.流程总结
<1>用户进入Login.jsp登录页面,用户点击提交按钮后,跳转到action="/servlet/LoginServlet"的请求
<2>web.xml配置servlet和Filter,服务器通过action="/servlet/LoginServlet"在web.xml中找到对应的servlet
<3>LoginServlet中有两种情况,登录成功会存一个USER_SESSION属性在session中,并跳转到"/sys/success.jsp";登录失败跳转到"/error.jsp"
<4>登录成功,给一个按钮可以跳到"/servlet/logout"请求,logout这个servlet做的事就是销毁USER_SESSION并且跳转到Login.jsp页面;登录失败,给一个按钮跳转到"/Login.jsp"登录页面
<5>使用Filter给"/success.jsp"加上权限验证,Filter中做用户的session判断,这样做用户登录成功并注销以后就不能直接在浏览器地址栏输出success.jsp访问到主页面
<6>由于session反复使用,所以提取出来一个常量放到工具类中
<7>配置tomcat,启动