P7 JavaWeb:过滤器Filter

204 阅读3分钟

一.是什么

1.概述

过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理;
可以选择拦截下什么资源,放行什么资源;
程序是每一个过滤器都会经过,但不一定会拦截。

2.图解

image.png

二.为什么用

1.用来过滤网站的数据,减少代码量,如处理中文乱码,登录验证,还比如网站写骂人的话会变成***就是用Filter是实现的
2.Filter和servlet一样,都是需要拿到request和response的,只不过servlet使用是通过实现servlet接口,Filter的使用是实现过滤器filter接口
3.总结:
应用场景
    自动登录
    统一设置编码格式
    访问权限控制
    敏感字符过滤等

三.怎么用

1.回忆servlet处理中文乱码

<1>编写servlet

Snipaste_2022-01-09_23-37-11.png

<2>注册servlet并编写mapping

Snipaste_2022-01-09_23-33-52.png

<3>部署tomcat

Snipaste_2022-01-09_23-31-07.png

<4>测试访问

Snipaste_2022-01-09_23-38-48.png

2.代码实现

<1>创建普通maven项目,使用javaToWeb转为web项目

<2>pom文件导入依赖

Snipaste_2022-01-09_23-26-52.png

<3>编写Filter并与servlet对比

I.实现filter接口,注意导的包

Snipaste_2022-01-09_23-28-38.png

II.重写方法

Snipaste_2022-01-09_23-48-02.png

III.与servlet对比

Snipaste_2022-01-09_23-50-52.png

<4>在web.xml配置Filter

Snipaste_2022-01-09_23-52-36.png

<5>配置tomcat并测试访问

发现只有在/servlet下的路径才会处理乱码,注意平常尽量写多个filter-mapping

Snipaste_2022-01-09_23-54-10.png

3.Filter接口的生命周期

重写方法的生命周期

<1>.init()

 初始化的时候可以搭建监听日志,比如通过拿到应用上下文对象设置属性,因此我们可以在服务器一启动的时候设置固有的属性,让所有人可以访问

Snipaste_2022-01-10_00-03-23.png Snipaste_2022-01-10_00-04-14.png

<2>.doFilter()

Snipaste_2022-01-10_00-00-33.png

<3>.destory()

web服务器停止的时候,过滤器才会销毁

Snipaste_2022-01-10_00-01-14.png

四.Filter实现权限拦截

1.需求:

用户登录以后才能进入主页,用户注销后就不能进入主页了
思路:
    <1>用户登录之后,向session中放入用户的数据
    <2>进入主页的时候要判断用户是否已经登录,要求在Filter中实现

2.代码实现

<1>编写登录成功主页面

Snipaste_2022-01-10_08-22-06.png

<2>编写登录页面

Snipaste_2022-01-10_00-14-03.png

<3>编写错误页面

Snipaste_2022-01-10_08-32-36.png

<4>创建工具包,编写放常量的类

Snipaste_2022-01-10_08-48-37.png

<5>编写登录与注销的servlet

Snipaste_2022-01-10_08-51-06.png Snipaste_2022-01-10_08-49-29.png

<6>编写过滤器Filter

Snipaste_2022-01-10_08-50-29.png

<7>在web.xml中配置servlet和filter

Snipaste_2022-01-10_08-31-01.png Snipaste_2022-01-10_08-43-38.png

<8>访问

Snipaste_2022-01-10_00-24-35.png

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,启动