javaEE之过滤器—知道为什么你要登录了吧!
Posted Java联盟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaEE之过滤器—知道为什么你要登录了吧!相关的知识,希望对你有一定的参考价值。
温馨提示:本文阅读需要5分钟,部分图片来源于网络版权归原作者所有!
小伙伴们
今天厉害了
今天我们来做一个过滤器
过滤器是一种 Java 组件,这一点与 Servlet 类似,用于在请求发到 Servlet 之前进行拦截并处理,或者在 Servlet 执行完毕之后,在发送回客户端之前对响应进行拦截并处理。
原理看着有点难
我们来做一个实验
首先创建一个测试页面
然后创建一个过滤器
直接用右键 new 一个就可以看见 filter 的选项 如果你的编译器看不见 选择Other 输入filter 就可以找到了
输入路径以及文件名
就出现一个写好的 filter 文件了
现在我们在里面添加内容
过滤器配置:
注解方式:
filterName : 过滤的名称
urlPatterns : 过滤器URL匹配模式 /* 代表所有的请求
web.xml配置方式
这两种方式的作用是一样的!伙伴们要注意的是,使用配置方式的时候一定要把注解方式注释掉呀!
我们的控制台上就输出了信息
过滤器逻辑上位于容器和 Servlet 之间,当浏览器请求某个Web资源( JSP、Servlet、html静态页面等)时,容器检查请求的资源是否符合某个过滤器的URL模式,如果不符合,容器就直接调用所请求的Web资源。否则,容器就会生成一个请求和一个响应对象,并将这两个对象传递给相应的过滤器。
之后过滤器执行自己的过滤操作,如果满足一定的条件,过滤器可以调用所请求的 Web 资源,否则,过滤器可以阻断该请求,转而进行其他的操作。例: 如果过滤器发现未登录用户试图访问受保护的Web资源,就可以阻断该请求,并重定向到登录页面。
从图可以看到,在调用 Servlet 之前和之后都要经过过滤器,也就是说,开发人员可以根据需要选择在调用 Servlet 之前或之后添加程序代码。
从用途上可以将过滤器分为请求过滤器和响应过滤器。
请求过滤器主要用于安全检查、修改请求头和请求体的格式、以及记录请求日志。
响应过滤器主要用于压缩响应数据流、附加或修改响应数据流、创建不同的响应数据包。
多个过滤器可以串成一个过滤器链,一个接一个运行,过滤器本来就设计为完全独立的,过滤器不关心在自己运行之前是否有其他过滤器运行过,也不关心在自己运行之后是否有其他过滤器要运行。
在这里强调过滤器的独立性是指,作为编程人员,不能在过滤器编码中依赖其他过滤器。
(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
以上是关于javaEE之过滤器—知道为什么你要登录了吧!的主要内容,如果未能解决你的问题,请参考以下文章
JAVAEE之--------过滤器设置是否缓存(Filter)
SpringCloud系列之网关gateway-11.权限认证-分布式session替代方案
D17 Sping Boot 入门 Sping框架--Java Web之Filter过滤器