首页 > 编程语言 >JavaWeb三大组件之过滤器-Filter

JavaWeb三大组件之过滤器-Filter

时间:2023-01-08 23:35:49浏览次数:43  
标签:filter JavaWeb 代码 Filter doFilter 三大 过滤器 filterChain

1.Filter过滤器

Filter过滤器是javaEE的规范,是接口(javax.servlet Interface Filter)

 2.过滤器作用-

拦截请求,过滤响应

情景引入:浏览器访问tomcat的login页面,进行登录验证,保存session,之后再对具体的资源进行访问

if 浏览器不讲武德,直接去访问资源,怎么办?在资源上获取session进行验证用户是否登录,如果资源有很多,那么每个都要进行验证---代码冗余,管理复杂,怎么办?

使用过滤器统一验证(身份验证,权限检查,日志操作,事务管理)

3.过滤器原理

浏览器---http请求

          ↓

服务器(tomcat)<在web.xml文件中由程序员进行过滤条件的设置,符合条件的进行过滤,不符合的直接放行>

    <!--filter一般写在servlet前面-->
    <!--<url-pattern>/manage/*</url-pattern>
    表示当你去访问这个路径下的资源时候,就会调用这个Filter进行过滤
    /manage/*中第一个/会由服务器来解析,解析成http://localhost:8080(ip:port)/工程路径-->
    <filter>
        <filter-name>ManageFilter</filter-name>
        <filter-class>com.zitWang.filter.ManageFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>ManageFilter</filter-name>
        <url-pattern>/manager/*</url-pattern>
    </filter-mapping>

        ↓

filter过滤器   →<失败就返回>

        ↓<合法就允许访问资源>

    资源

4.Filter配置Url-Pattern规则

url-pattern设置Filter的拦截路径,拦截时,只关心是否匹配,不关心请求的资源是否真的存在

匹配:

5.Filter生命周期

5.1创建:web工程启动,执行构造器与init方法,生成一个ManagerFilter实例常驻内存(一个filter,一次init()方法发的调用)

5.2活动:http请求到了tomcat服务器时,<url-pattern>匹配上了,执行doFilter();进行拦截


浏览器的地址栏:http://localhost:8080/工程路径/manager/xxxx资源
与<url-pattern>/manager/*</url-pattern>匹配上了

调用时候tomcat创建(ServletRequest,ServletResponse ,FilterChain三个对象),并且通过doFilter传入,在同一次请求中,ServletRequest,ServletResponse分别与之后使用的Request,Response是同一个对象。

5.3销毁:停止web工程时,调用destroy();销毁Filter实例

6.FilterConfig

filterConfig在创建filter时一并创建,通过init()方法传入,filterConfig包含filter的配置文件的配置信息

7.FilterChain过滤器链

一次请求,一个线程中,多个过滤器层层把关,筛选拦截

filterChain.doFilter(servletRequest,servletResponse);

在一个过滤器的doFilter方法中执行filterChain.doFilter(servletRequest,servletResponse);表示执行下一个过滤器的doFilter方法,如果没有下一个过滤器,则表示这个过滤器放行,此时会访问目标资源。

FilterChain过滤器链:一次http请求的多层过滤

一个过滤器的doFilter方法中有:(前置代码)+(filterChain.doFilter)+(后置代码)

当有多个过滤器执行过滤器链的时候:请求顺序按照web.xml文件中filter的配置顺序执行,具体执行顺序如下:

例子:a过滤器:(前置代码AAA)+(a的filterChain.doFilter)+(后置代码aaa)

          b过滤器:(前置代码BBB)+(b的filterChain.doFilter)+(后置代码bbb)

顺序:AAA →a的filterChain.doFilter →前置代码BBB →b的filterChain.doFilter →请求到了目标资源→执行后置代码bbb → 执行后置代码aaa

 

标签:filter,JavaWeb,代码,Filter,doFilter,三大,过滤器,filterChain
From: https://www.cnblogs.com/zitw/p/17034838.html

相关文章

  • 三大加深减淡
    1.中性灰中性灰rgb为128,128,128使用中性灰来处理人物肤色建立中性灰图层方法:法一新建一个图层将拾色器颜色调为中性灰,给新建的图层颜色填充为中性灰(ctrl+del填充背......
  • VsCode里面在JavaWeb项目里面配置Maven环境详解
    1、在之前已经新建完成一个JavaWeb项目的基础上开始2、设置里面搜索Maven,找到这个,然后进行定位3、将TomcatServer配置进去(右上角有一个加号)(对于已经学过Java的并不难......
  • VsCode新建Java、SpringBoot、Python、JavaWeb项目的基本步骤
    新建Java项目选中正上方的搜索框,按下F1快捷键,输入createJava,即可出现这样的一个命令:选中这个:然后为新创建的项目选择一个合适的位置就好啦!新建SpringBoot项目选中......
  • JavaWeb概述
    笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)参考视频:黑马程序员新版JavaWeb基础教程,Javaweb从入门到企业实战完整版注意:javaWeb部分包含了前端和后......
  • JavaWeb三大组件之监听器-Listener
    1.JavaWeb三大组件Servlet程序,Listener监听器,Filter过滤器2.Listener监听器监听某种变化(生命周期监听,属性变化监听),做出反应--触发对应方法完成相应任务;监听器实现接口......
  • Java的三大版本
    Java的三大版本JavaSE:标准版(桌面程序,控制台开发)JavaME:嵌入式开发(手机,小家电)JavaEE:E企业级开发(web端,服务器开发)......
  • Gabor Filterbank (GFB) Features
    GFBisarecentfeaturedesignedforrobustASRbytakingintoaccountthespectrotemporalmodulationfrequencies.ToderiveGFB,wecomputethelogmel-spectr......
  • PyFilterbank
    https://siggigue.github.io/pyfilterbank/index.htmlFractionalOctaveFilterBankMatlaboctaveFilterBankdecomposesasignalintooctaveorfractional-octave......
  • 学习笔记——过滤器链;监听器;Servlet、Filter、Listener的注解方式开发
    2023-01-06一、过滤器链1、含义:如果出现一个请求存在多个过滤器对其过滤,出现过滤器链。在放行前,过滤器是正序执行,放行后过滤器是倒序执行。2、过滤器的顺序:是与filter-......
  • Filter与Servlet的区别与联系
    在我们写代码时,在web.xml中总能发现类似下面的代码:<spanstyle="font-family:KaiTi_GB2312;font-size:18px;"><spanstyle="font-family:KaiTi_GB2312;font-size:18px;"......