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

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


小伙伴们

今天厉害了

今天我们来做一个过滤器

那么什么是过滤器?


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


原理看着有点难

我们来做一个实验


首先创建一个测试页面



然后创建一个过滤器


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



输入路径以及文件名


 


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


现在我们在里面添加内容

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



过滤器配置:


注解方式: 




filterName : 过滤的名称

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


web.xml配置方式



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


 


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


 

过滤器的原理


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


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


 


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


过滤器的用途


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

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

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

过滤器链


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


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


 

 

过滤器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 包

在里面新建一个过滤器


代码:



 之后再web.xml中设置一下


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


登录验证过滤器


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


首先用户信息存到seesion里面



然后写过滤器


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


在写一个用来验证的servlet



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



看一下效果


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



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


用户登录失败访问another.do

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


怎么样是不是很厉害

以后我们写的项目的时候

就可以用到过滤器

不登录的一律不许访问


那么再见了

么么哒!




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

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




©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文包括:1、Filter简介2、Filter是如何实现拦截的?3、Filter开发入门4、Filter的生命周期...
    廖少少阅读 7,593评论 3赞 56
  • Servlet过滤器是 Servlet 程序的一种特殊用法,主要用来完成一些通用的操作,如编码的过滤、判断用户的登...
    重山杨阅读 1,373评论 0赞 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,246评论 19赞 139
  • 1.过滤器简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filte...
    胖先森阅读 1,244评论 0赞 16
  • 监听器(listener) 监听器简介 :监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个...
    奋斗的老王阅读 2,748评论 0赞 53

友情链接更多精彩内容