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

Posted Java联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaEE之过滤器—知道为什么你要登录了吧!相关的知识,希望对你有一定的参考价值。

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


小伙伴们

今天厉害了

今天我们来做一个过滤器

那么什么是过滤器?


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


原理看着有点难

我们来做一个实验


首先创建一个测试页面


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


然后创建一个过滤器


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


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


输入路径以及文件名


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


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

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


现在我们在里面添加内容


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


过滤器配置:


注解方式: 


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


filterName : 过滤的名称

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


web.xml配置方式


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


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


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


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


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

 

过滤器的原理


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


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


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


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


过滤器的用途


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

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

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

过滤器链


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


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


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

 

过滤器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之过滤器—知道为什么你要登录了吧!


 之后再web.xml中设置一下


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

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


登录验证过滤器


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


首先用户信息存到seesion里面


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


然后写过滤器


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

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


在写一个用来验证的servlet


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


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


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


看一下效果


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

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



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

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


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

用户登录失败访问another.do

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


怎么样是不是很厉害

以后我们写的项目的时候

就可以用到过滤器

不登录的一律不许访问


那么再见了

么么哒!


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


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


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

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




以上是关于javaEE之过滤器—知道为什么你要登录了吧!的主要内容,如果未能解决你的问题,请参考以下文章

JAVAEE之--------过滤器设置是否缓存(Filter)

Java Web之简单的登录过滤器实现方法

SpringCloud系列之网关gateway-11.权限认证-分布式session替代方案

D17 Sping Boot 入门 Sping框架--Java Web之Filter过滤器

D17 Sping Boot 入门 Sping框架--Java Web之Filter过滤器

javaEE页面跳转问题