filter过滤器_Java三大器之过滤器

过滤器这个东西在java程序中真的用的非常多,前面那篇文章说了,我需要写一个登录的功能,具体的效果也说的很清楚,但是前面说的是通过前端端架vue的一个钩子函数来实现,但是我们后端也需要进行限制才行,不然只靠前端是很难完全实现那个效果的,而且如果只靠前端也很不安全。所以过滤器成为了功能实现的首选。

当然了,过滤器也不只是是了实现我们的那个登录效果,同时也能使我们在玩我们程序的时候遵循我们自己的规则。

比如说,我们在访问我们的某个资源的时候需要一些凭证,这个资源就是我们页面、数据、操作等等。所谓的凭证呢,在这里就是我们的登录认证,如果在你需要访问某个资源的时候,我们的程序会通过我们写的代码来判断你是否登录了,如果你没有登录,不好意思,你没有资格看。

好了,前面说了我们需要实现我们的效果,现在来说一下为什么需要用过滤器:

2b0ecf4786eb247539dd14e43fc6d111.png

使用这个图我们可以很好的理解为啥需要使用了,如果我们不控制好我们的资源,那不论什么人都可以访问我们的页面,那是非常不爽的,至少我感觉是这样的,但是我们也不可能为每个单独的资源去编写一些程序,比如说,我们单独的为图片这个资源设置一些访问条件,然后后面又有其他资源了,我们又为其他资源单独的区写一些设置条件,那是很麻烦的,那怎么办,这个时候我们就想要一个一次编写,长久有效的东西,那这个东西就是过滤器了。

在这里简单的说一下这个过滤器的原理:

当我们在web.xml中注册了一个过滤器后,这个过滤器就成了servlet与tomcat交互的一道关卡,这个关卡就像我们的房屋的门一样,我们每个人进入这个房间都需要通过这道门。这个过滤器就相当于是这道门。这个过滤器可以对tomcat容器发送给servlet程序的每个请求进行拦截处理,通过也能对serlvet对tomcat容器的每个响应进行处理。

每个web应用程序可以注册多个Filter,每个Filter可以对一个或者一组多个servlet进行拦截

若有多个 Filter 程序对某个 Servlet 程序的访问进行拦截,当针对该 Servlet 的访问请求到达时,web 容器将把这多个 Filter 程序组合成一个 Filter 链(过滤器链)。Filter 链中各个 Filter 的拦截顺序与它们在应用程序的 web.xml 中映射的顺序一致。

这里说一下这个Filter链,其实不是什么好高大上的东西,理解为多个过滤器链接在一起的就行了,就像我们去面试时一样的,我们面试分为一面,二面,甚至三面,只有一面二面三面你都过了,你才可以去上班成为公司的员工。这个就是Filter链。

使用过滤器的步骤:

创建一个类

实现Filter

在web.xml中注册

下面是Filter容器的简单的实现hellword:

这里我们创建一个类,并实现Filter

3263ae24697191e81a060f2f9a1cb166.png

我们在web.xml文件中注册

5237dcc6f1cd62456c04637145be03e0.png

这样写好以后,我们完整的过滤器就写好了。

下面来说一下过滤器的生命周期:

我们可以看到,在我们实现Filter以后,我们需要实现三个方法,分别是init、doFilter、destroy。分别的意思是初始化、过滤器要做的事情、销毁。这样我们就很好理解过滤器的生命周期了。

当服务器启动的时候,过滤器被初始化,执行init方法,输出“初始化过滤器”,(这个方法只会调用一次,这个地方说明了过滤器也是单线程的)

当服务器发送轻松,通过过滤器,过滤器收到请求,调用doFilter方法,输出“doFilter方法”。当程序停止或者出现错误的时候调养destroy方法进行对过滤器的销毁。

既然我们把程序放在doFilter里面来了,那我们怎么把他放出来呢,就像我们进房间一样,我们总不可能一直呆在房间里面吧。

放行程序请求:

这里的放行并不是过滤器不管用,而是经过过滤器处理以后,我们让那个请求正常执行,就像我们通过房屋的门进入房间以后,换了一身衣服在出来的道理是一样的。我们只需要在dofilter中调用chain.doFilter(request,response)即可放行我们前面拦截的请求。

过滤器的执行原理:在 doFilter 执行之前,由容器将 filterChain 对象传入方法。调用此对象的.doFilter()方法可以将请求放行,实际上是执行过滤器链中的下一个 doFilter 方法,但是如果只有一个过滤器,则为放行。

好了,过滤器的主要内容说的差不多了

现在我们最后来总结一下,我们的过滤器过滤的资源方式:

1、精准匹配

例如:/index.jsp  /user/context 表示请求在访问/inde.jsp  /user/context资源的时候过滤拦截

2、路径匹配

/user/* 表示只要是user下拉的路径都会被拦截,比如user/login 、user/id/add 等等

3、扩展匹配

/*.jsp   /*.html 表示只要是以jsp或者html结尾的所有资源都会被过滤处理

好了,今天的内容分享到这里,这是是记录我java程序life的地方,故事很长,我们慢慢体味。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值