javaEE之过滤器—知道为什么你要登录了吧!

javaEE之过滤器—知道为什么你要登录了吧!_第1张图片

温馨提示:本文阅读需要5分钟,部分图片来源于网络版权归原作者所有!


小伙伴们

今天厉害了

今天我们来做一个过滤器

那么什么是过滤器?


过滤器是一种 Java 组件,这一点与 Servlet 类似,用于在请求发到 Servlet 之前进行拦截并处理,或者在 Servlet 执行完毕之后,在发送回客户端之前对响应进行拦截并处理。


原理看着有点难

我们来做一个实验


首先创建一个测试页面


javaEE之过滤器—知道为什么你要登录了吧!_第2张图片


然后创建一个过滤器


直接用右键 new 一个就可以看见 filter 的选项 如果你的编译器看不见 选择Other 输入filter 就可以找到了


javaEE之过滤器—知道为什么你要登录了吧!_第3张图片


输入路径以及文件名


 javaEE之过滤器—知道为什么你要登录了吧!_第4张图片


javaEE之过滤器—知道为什么你要登录了吧!_第5张图片

就出现一个写好的 filter 文件了


现在我们在里面添加内容

这是一个简单的过滤器可以获取发出请求的主机的IP地址、时间以及请求对象把这些内容输出到控制台上。


javaEE之过滤器—知道为什么你要登录了吧!_第6张图片


过滤器配置:


注解方式: 




filterName : 过滤的名称

urlPatterns : 过滤器URL匹配模式  /* 代表所有的请求


web.xml配置方式


javaEE之过滤器—知道为什么你要登录了吧!_第7张图片


这两种方式的作用是一样的!伙伴们要注意的是,使用配置方式的时候一定要把注解方式注释掉呀!


 javaEE之过滤器—知道为什么你要登录了吧!_第8张图片


我们的控制台上就输出了信息


 

过滤器的原理


过滤器逻辑上位于容器和 Servlet 之间,当浏览器请求某个Web资源( JSP、Servlet、HTML静态页面等)时,容器检查请求的资源是否符合某个过滤器的URL模式,如果不符合,容器就直接调用所请求的Web资源。否则,容器就会生成一个请求和一个响应对象,并将这两个对象传递给相应的过滤器。


之后过滤器执行自己的过滤操作,如果满足一定的条件,过滤器可以调用所请求的 Web 资源,否则,过滤器可以阻断该请求,转而进行其他的操作。例: 如果过滤器发现未登录用户试图访问受保护的Web资源,就可以阻断该请求,并重定向到登录页面。


 javaEE之过滤器—知道为什么你要登录了吧!_第9张图片


从图可以看到,在调用 Servlet 之前和之后都要经过过滤器,也就是说,开发人员可以根据需要选择在调用 Servlet 之前或之后添加程序代码。


过滤器的用途


从用途上可以将过滤器分为请求过滤器响应过滤器

请求过滤器主要用于安全检查、修改请求头和请求体的格式、以及记录请求日志。

响应过滤器主要用于压缩响应数据流、附加或修改响应数据流、创建不同的响应数据包。 

过滤器链


多个过滤器可以串成一个过滤器链,一个接一个运行,过滤器本来就设计为完全独立的,过滤器不关心在自己运行之前是否有其他过滤器运行过,也不关心在自己运行之后是否有其他过滤器要运行。


在这里强调过滤器的独立性是指,作为编程人员,不能在过滤器编码中依赖其他过滤器。


 javaEE之过滤器—知道为什么你要登录了吧!_第10张图片

 

过滤器API


(1) Filter 接口

每一个过滤器都需要实现Filter接口的三个方法,既 init()方法、doFilter()方法和 destroy()方法。

 

(2) FilterChain 接口

FilterChain 接口只定义一个方法:

public void doFilter (ServletRequest request, ServletResponse response)

该方法调用过滤器链中的下一个过滤器或最终的Web资源,如JSP或Servlet。每一个过滤器如果不想阻断请求,就必须调用FilterChain的doFilter()方法。

 

(3) FilterConfig接口

容器在初始化过滤器时将 FilterConfig 对象传递给过滤器,通过该对象可以获取过滤器配置的初始化参数以及 ServletContext Web 应用环境对象,然后获取Web应用的相关信息。


写两个过滤器 


之前写过一个实现登录功能的程序,

现在我们来给这这个程序

添加过滤器


首先

编码的过滤器


在项目中创建一个 filter 包

在里面新建一个过滤器


代码:


javaEE之过滤器—知道为什么你要登录了吧!_第11张图片


 之后再web.xml中设置一下


javaEE之过滤器—知道为什么你要登录了吧!_第12张图片

这样我们所有的请求就都会被我们的字符编码过滤器过滤


登录验证过滤器


这个登录验证的作用就是,如果你没有登陆账号,有些页面我们就是不让访问的,就像淘宝网,你没有登陆的话就没发进入结账的页面


首先用户信息存到seesion里面


javaEE之过滤器—知道为什么你要登录了吧!_第13张图片


然后写过滤器


javaEE之过滤器—知道为什么你要登录了吧!_第14张图片

如果,我们没有登录账号的话页面就会定位到我们的登录页面


在写一个用来验证的servlet


javaEE之过滤器—知道为什么你要登录了吧!_第15张图片


最后不要忘了进行 web.xml 的配置


javaEE之过滤器—知道为什么你要登录了吧!_第16张图片


看一下效果


javaEE之过滤器—知道为什么你要登录了吧!_第17张图片

眼熟不!这是登陆成功的页面



javaEE之过滤器—知道为什么你要登录了吧!_第18张图片

登陆成功就可以访问 another.do!


javaEE之过滤器—知道为什么你要登录了吧!_第19张图片

用户登录失败访问another.do

就会回到我们的登录页面了


怎么样是不是很厉害

以后我们写的项目的时候

就可以用到过滤器

不登录的一律不许访问


那么再见了

么么哒!




有任何问题都可以在文章留言,娜姐都看着的呢!

合作,投稿,转载,版权问题请联系 李娜:Lina_Java




你可能感兴趣的:(javaEE之过滤器—知道为什么你要登录了吧!)