精华内容
下载资源
问答
  • 主要是几种过滤器的使用方法过滤器的主要几种用途。
  • Java过滤器Filter讲解(Java基础)

    千次阅读 2020-06-06 19:48:59
    文章目录一、什么是过滤器二、如何编写过滤器三、 过滤器配置四、Filter的生命周期五、多个Filter的执行顺序 一、什么是过滤器 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter...

    你好我是辰兮,很高兴你能来阅读,本篇文章小结了Java过滤器的知识点,献给初学者,分享获取新知,希望我们一起进步。



    一、什么是过滤器

    Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理 的所有web资源:例如Jsp, Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。
    在这里插入图片描述
    例如实现 URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

    Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。

    通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。


    二、如何编写过滤器

    1、编写java类实现Filter接口
    2、重写doFilter方法
    3、设置拦截的url

    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    @WebFilter("/myservlet1")//过滤路径
    public class MyFilter1 implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("过滤器初始化了........init... "+filterConfig);
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("过滤前........doFilter "); //放行
            filterChain.doFilter(servletRequest, servletResponse);
            System.out.println("过滤后.......doFilter");
        }
    
        @Override
        public void destroy() {
            System.out.println("销毁了.....destroy");
        }
    
    }
    
    
    • doFilter(ServletRequest, ServletResponse, FilterChain):这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的FilterChain对象提供了后续过滤器所要调用的信息。如果该过滤器是过滤器链中的最后一个过滤器,则将请求交给被请求资源。也可以直接给客户端返回响应信息。
    • init(FilterConfig):由Web容器来调用完成过滤器的初始化工作。它保证了在第一次doFilter()调用前由容器调用。您能获取在web.xml 文件中指定的初始化参数。
    • destroy():由Web容器来调用来释放资源,doFilter()中的所有活动都被该实例终止后,调用该方法。
    • ps:这里继承Filter千万不要导错了包import javax.servlet.*;

    在这里插入图片描述

    • 向我这里的我一开始点快了,导包错误就重写不同的方法,完全不是一个接口

    在这里插入图片描述


    三、 过滤器的配置

    1.注解式配置

    在自定义的Filter类上使用注解@WebFilter(“/*”)

    2.xml配置

    • 在web.xml中进行过滤器的配置:
    <!--过滤器的xml配置 -->
    <filter> 
        <!--名称-->
        <filter-name>fi</filter-name>
         <!--过滤器类全称--> 
        <filter-class>com.it.web.filter.SecondFilter</filter-class> 
    </filter> 
        <!--映射路径配-->
    <filter-mapping>
       <!--名称--> 
       <filter-name>fi</filter-name> 
       <!--过滤的url匹配规则和Servlet的一模一样--> 
       <url-pattern>/</url-pattern>
    </filter-mapping>
    

    <url-pattern>/*</url-pattern>

    在配置中需要注意的有两处:一是指明过滤器类所在的包路径。二是处定义过滤器作用的对象。一般有以下规则:

    1:作用与所有web资源:<url—pattern>/*</url-pattern>。则客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。
    
    2:作用于某一文件夹下所有文件:<url—pattern>/dir/*</url-pattern>
    
    3:作用于某一种类型的文件:<url—pattern>*.扩展名</url-pattern>。比如<url—pattern>*.jsp</url-pattern>过滤所有对jsp文件的访问请求。
    
    4:作用于某一文件夹下某一类型文件:<url—pattern>/dir/*.扩展名</url-pattern>
    
    如果一个过滤器需要过滤多种文件,则可以配置多个<filter-mapping>,一个mapping定义一个url-pattern来定义过滤规则。
    

    四、Filter的生命周期

    1、Filter的创建

    Filter的创建和销毁由web服务器负责。 web应用程序启动时,web服务器将创建Filter的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次。通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

    2、Filter的销毁

     web容器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅执行一次。在destroy方法中,可以释放过滤器使用的资源。

    3、FilterConfig接口

    用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得:

      String getFilterName():得到filter的名称。
      String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
      Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
      public ServletContext getServletContext():返回Servlet上下文对象的引用。
    

    在这里插入图片描述


    五、多个Filter的执行顺序

    如果一定要确保执行顺序,就要对配置进行修改了,执行顺序如下:

    • 在web.xml中,filter执行顺序跟的顺序有关,先声明的先执行。
    • 使用注解配置的话,filter的执行顺序跟名称的字母顺序有关,例如AFilter会比BFilter先执行。
    • 如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter。
    先执行带有url-pattern标签的filter,再执行带有servlet-name标签的filter
    如果同为url-pattern或servlet-name,则会按照在web.xml中的声明顺序执行
    
    // ATestFilter
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("in ATestFilter");
        chain.doFilter(request, response);
    }
     
     
    // TestFilter
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("in TestFilter");
        chain.doFilter(request, response);
    }
     
    // ServletFilter
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("in ServletFilter");
        chain.doFilter(request, response);
    }
    

    在这里插入图片描述

    • 如图配置中先有两个/*路径,这两个先执行
    in TestFilter
    in ATestFilter
    in ServletFilter
    
    • ps:测试代码取自网络

    The best investment is to invest in yourself

    在这里插入图片描述

    2020.06.06 记录辰兮的第78篇博客

    展开全文
  • 如图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。当请...

    过滤器

    过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

    d371faffd64050c96753c287a4491b82.png

    如图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉。

    在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:

    79ebd7935504102e808c6bd93ba4120a.png

    过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中还要进行相应的操作。

    下面是过滤器的简单应用:

    1:创建过滤器

    95c8acfbf7ecaa5b1a68fbe73391587c.png

    如图,新建一个class,实现接口Filter(注意:是javax.servlet中的Filter)。

    2:重写过滤器的doFilter(request,response,chain)方法。另外两个init()、destroy()方法一般不需要重写。在doFilter方法中进行过滤操作。

    常用代码有:获取请求、获取响应、获取session、放行。

    剩下的代码就是根据session的属性进行过滤操作、设置编码格式等等了,看情况而定。

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    HttpServletRequest request=(HttpServletRequest) arg0;//获取request对象

    HttpServletResponse response=(HttpServletResponse) arg1;//获取response对象

    HttpSession session=request.getSession();//获取session对象

    过滤操作代码......

    chain.doFilter(request, response);//放行,通过了当前过滤器,递交给下一个filter进行过滤

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    3:在web.xml中配置过滤器。这里要谨记一条原则:在web.xml中,监听器>过滤器>servlet。也就是说web.xml中监听器配置在过滤器之前,过滤器配置在servlet之前,否则会出错。

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    loginFilter//过滤器名称

    com.ygj.control.loginFilter//过滤器类的包路径

    //可选

    参数名//过滤器初始化参数

    参数值

    //过滤器映射

    loginFilter

    指定过滤器作用的对象

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    在配置中需要注意的有两处:一是指明过滤器类所在的包路径。二是处定义过滤器作用的对象。一般有以下规则:

    1:作用与所有web资源:/*。则客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。

    2:作用于某一文件夹下所有文件:/dir/*

    3:作用于某一种类型的文件:*.扩展名。比如*.jsp过滤所有对jsp文件的访问请求。

    4:作用于某一文件夹下某一类型文件:/dir/*.扩展名

    指定一个过滤器。用于为过滤器指定一个名字,该元素的内容不能为空。元素用于指定过滤器的完整的限定类名。元素用于为过滤器指定初始化参数,它的子元素指定参数的名字,指定参数的值。

    在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径子元素用于设置filter的注册名称。该值必须是在元素中声明过的过滤器的名字设置 filter 所拦截的请求路径(过滤器关联的URL样式)指定过滤器所拦截的Servlet名称。指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个子元素用来指定 Filter 对资源的多种调用方式进行拦截。子元素可以设置的值及其意义

    REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。

    INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

    FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

    ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

    如果一个过滤器需要过滤多种文件,则可以配置多个,一个mapping定义一个url-pattern来定义过滤规则。

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    loginFilter

    com.ygj.control.loginFilter

    loginFilter

    *.jsp

    loginFilter

    *.do

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    例1:用过滤器实现登录验证,没登录则驳回访问请求并重定向到登录页面。

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    public void doFilter(ServletRequest arg0, ServletResponse arg1,

    FilterChain arg2) throws IOException, ServletException {

    HttpServletRequest request=(HttpServletRequest) arg0;

    HttpServletResponse response=(HttpServletResponse) arg1;

    HttpSession session=request.getSession();

    String path=request.getRequestURI();

    Integer uid=(Integer)session.getAttribute("userid");

    if(path.indexOf("/login.jsp")>-1){//登录页面不过滤

    arg2.doFilter(arg0, arg1);//递交给下一个过滤器

    return;

    }

    if(path.indexOf("/register.jsp")>-1){//注册页面不过滤

    arg2.doFilter(request, response);

    return;

    }

    if(uid!=null){//已经登录

    arg2.doFilter(request, response);//放行,递交给下一个过滤器

    }else{

    response.sendRedirect("login.jsp");

    }

    }

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    例2:设置字符编码

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    public void doFilter(ServletRequest request, ServletResponse response,

    FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request2=(HttpServletRequest) request;

    HttpServletResponse response2=(HttpServletResponse) response;

    request2.setCharacterEncoding("UTF-8");

    response2.setCharacterEncoding("UTF-8");

    chain.doFilter(request, response);

    }

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    展开全文
  • Java--Filter过滤器

    2021-03-09 23:58:27
    Java--Filter(过滤器)简介Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源,例如Jsp,Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现...

    Java--Filter(过滤器)

    简介

    Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源,例如Jsp,

    Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。

    实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

    配置

    注解方式

    @WebFilter("/*")//访问所有资源之前,都会执行该过滤器

    public class Filter implements Filter {

    @Override

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    System.out.println("filter被执行了....");

    //放行

    filterChain.doFilter(servletRequest,servletResponse);

    }

    @Override

    public void destroy() {

    }

    }

    web.xml

    demo1

    cn.itcast.web.filter.FilterDemo1

    demo1

    /*

    过滤器生命周期方法

    init

    在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源

    doFilter

    每一次请求被拦截资源时,会执行。执行多次

    destroy

    在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

    过滤器配置详解

    拦截路径配置

    具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行

    拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行

    后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行

    拦截所有资源:/* 访问所有资源时,过滤器都会被执行

    拦截方式配置:资源被访问的方式

    注解配置:

    设置dispatcherTypes属性 REQUEST:默认值。浏览器直接请求资源

    FORWARD:转发访问资源

    INCLUDE:包含访问资源

    ERROR:错误跳转资源

    ASYNC:异步访问资源

    web.xml配置

    设置标签

    配置多个过滤器

    执行顺序:如果有两个过滤器:过滤器1和过滤器2,具体过程?

    过滤器1

    过滤器2

    资源执行

    过滤器2

    过滤器1

    过滤器先后顺序问题

    有两个过滤器先执行哪一个?

    注解配置:按照类名的字符串比较规则比较,值小的先执行 如: AFilter 和 BFilter,AFilter就先执行了。

    web.xml配置: 谁定义在上边,谁先执行

    原文链接:https://www.cnblogs.com/guizimo/p/13280979.html

    展开全文
  • Java ---Filter过滤器

    2021-03-01 09:11:31
    本篇简单介绍filter的基本使用方法,主要涉及以下内容:Filter的背景知识使用Filter的流程Filter的生命周期一个完整的实例一、Filter的简单介绍Filter在英文中是过滤器的意思,当然在此处的使用也是完美的切合了它的...

    Filter可以视作是servlet的加强版,主要用作对用户的请求进行预处理,或者对返回给客户端的结果进行再次加工,是一个典型的链式处理模式。本篇简单介绍filter的基本使用方法,主要涉及以下内容:

    Filter的背景知识

    使用Filter的流程

    Filter的生命周期

    一个完整的实例

    一、Filter的简单介绍

    Filter在英文中是过滤器的意思,当然在此处的使用也是完美的切合了它的意思,我们使用filter的主要目的就是完成一个过滤的作用。可以在一个请求到达servlet之前,将其截取进行逻辑判断,然后决定是否放行到请求的servlet。也可以在一个response到达客户端之前,截取结果进行逻辑判断,然后决定是否允许返回给客户端。所以filter有如下几个种类:

    用户授权的filter:filter负责判断用户是否有权限请求该页面,给予过滤判断

    日志filter:截取某个用户在本网站上的所有请求,记录轨迹

    负责解码的filter:规定处理本次请求的解码方式

    最后需要注意的是,一个filter过滤器可以加在多个servlet控制器上,当然多个filter过滤器也是可以加在一个servlet控制器上的。由此也是可以看出来,我们使用filter往往是对一些公共的操作进行处理,例如:判断用户权限,解码本次请求等,还比如,我们的web应用中某些页面是需要用户登录后才能访问的,以往我们都是在每个servlet页面加上判断控制,导致代码冗余,有了filter,我们可以定义一个实现了filter的过滤器,让需要判断是否登录的页面都加上这么一个过滤器,可以大大降低代码的冗余程度。

    二、Filter的使用流程

    在Java中如果想要自定义一个filter过滤器的话,需要继承Javax.servlet.Filter接口,这个接口中只有三个方法:

    default void init(FilterConfig filterConfig)

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3)

    default void destroy()

    其中init和destroy方法是有默认实现的,也就是我们不是必须重写这两个方法,但是doFilter 这个方法是一个核心的方法,是我们必须要实现的。首先我们看init方法的作用,这个方法是用来初始化filter实例的,也就是当用户请求了某个拦截器而此拦截器又匹配了某个过滤器,此时web容器就会定位到该过滤器然后创建该filter类的实例对象并调用此实例的init方法,完成初始化工作。对于destroy方法毋庸置疑就是在过滤器执行结束的时候调用,主要完成对一些资源的释放。下面主要看dofilter这个方法。

    doFilter方法是filter接口中的核心方法,一旦创建完该过滤器的实例之后,会执行dofilter方法,所有的过滤逻辑都是在此方法中进行的。主要有三个参数,第一个参数是一个ServletRequest对象,HttpServletRequest继承于此接口,当用户请求某个拦截器的时候,检测到此请求存在过滤器,于是会封装好本次请求的相关数据,传递给dofilter的ServletRequest参数,ServletResponse参数的来源和ServletRequest是一样的,都是由客户端封装过来的。至于第三个参数,这是一个FilterChain处理链,详细的介绍等说明了web.xml中配置filter之后。

    第一步如上,创建一个继承自filter接口的类,并实现其中的三个方法。第二步是在web.xml中配置该类用于过滤哪些拦截器。web.xml代码如下:

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

    version="3.1">

    isLogin

    Test_f.MyFilter

    isLogin

    /a

    isLogin

    /b

    如上述的代码,我们需要两个操作,首先是定义一个filter,指定了该filter的name和相对应的过滤器类。然后我们可以通过filter-mapping映射过滤器和URL,此处使用了两个映射,对该过滤器指定了对路径名为/a和/b的请求进行拦截。当然这个url-pattern元素的值可以有以下三种形式,完全匹配(/a/b等),目录匹配(/* 、 /abc/等),扩展名(.a,*.b等)。

    了解了配置filter的主要操作之后,我们回去看过滤器类,我们说init方法是在首次创建filter实例的时候,用于执行初始化操作的,其中有个参数FilterConfig ,这是当前filter的配置信息,其中方法如下:

    String getFilterName();

    ServletContext getServletContext();

    String getInitParameter(String var1);

    Enumeration getInitParameterNames();

    其实在创建filter实例的时候,web容器会将此实例对应在web.xml中的配置信息读取并封装成一个FilterConfig 对象传递给init方法,getFilterName方法就是我们在web.xml中配置的filter-name,getServletContext会获取当前servlet的上下文,当我们在定义filter的时候使用来定义一些初始化参数的时候,就可以使用此方法来获取这些初始化参数。getInitParameterNames方法用于获取所有初始化参数的枚举集合。这样我们在init方法中就可以获取这些配置参数,初始化filter实例。

    上面我们只定义了一个filter,如果我们对于一次请求需要执行多个filter,进行过滤操作的话,web容器会在你请求某个URL的时候,在web.xml中找到所有匹配的filter,按照注册的顺序以FilterChain 链的形式传递到方法doFilter的第三个参数中,而这个filterChain中只有一个方法:

    void doFilter(ServletRequest var1, ServletResponse var2)

    如果我们在 void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) 方法中调用var3.doFilter(var1,var2),就代表此filter实例结束,则web服务器会检查FilterChain对象中是否还有filter对象(因为这是一个链,filter的数量是大于等于一的),如果没有就会放行,直接调用目标地址,如果还有filter对象,就会转而执行下一个filter。正是由于这样的机制,我们才可以对于一个URL请求添加多个filter过滤器。

    三、一个简单的实例

    下面通过一个简单的实例直观的感受下filter过滤器的作用:

    public class MyFilter implements Filter {

    @Override

    public void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException{

    HttpServletRequest req = (HttpServletRequest)var1;

    HttpSession session = req.getSession();

    String state = (String)session.getAttribute("state");

    if(state.equals("1")){

    var3.doFilter(var1,var2);

    }else{

    HttpServletResponse response = (HttpServletResponse)var2;

    response.sendRedirect("Error_page.html");

    }

    }

    }

    //web.xml

    isLogin

    Test_f.MyFilter

    isLogin

    /index.jsp

    这是index页面

    //set.jsp

    //为了使程序简单,我们采用手动设置session

    //在实际的项目中,当用户登录之后自动设置session

    我们首先访问set.jsp页面设置本次会话的session值,然后修改浏览器地址栏访问index.jsp页面

    2fe2e7d3eb8680691fdd3a290ccf75be.png

    敲下回车键,结果如下:

    9413ab09b1d54b40e47d949845f3bd02.png

    我们先看,敲下回车键之后,程序怎么执行的,因为我们在web.xml中配置了MyFilter的拦截URL为index.jsp,所以当我们访问index.jsp的时候,会创建MyFilter 实例对象,封装配置信息到FilterConfig对象中,然后封装request请求和response,还有从web.xml 中读取的FilterChain对象传入MyFilter的doFilter方法中,我们在其中获取本次会话的session对象,取得其中的数据,如果为一放行,否则跳转到错误页面。此处的state的session值为0,我们在set.jsp中设置的,大家也可以在set.jsp页面设置其值为1,这样最终的结果会是这样的:

    de77c5b6a76d4c5287f6782f50d077d8.png

    上述的demo只是为了简单的演示,其实使用filter可以完成大大的降低我们的代码的冗余程度。这个例子是为了演示,所以很简单。

    四、Filter 的生命周期

    当用户请求某个页面时候,会到web.xml中匹配是否存在能够匹配上此次请求的filter,如果有封装它的配置信息,FilterChain链。然后调用init方法,完成初始化,接着调用dofilter方法,处理核心逻辑,当此实例被销毁的时候,会调用destroy方法。

    本篇文章结束,如果有理解错误,望大家指出!

    展开全文
  • java过滤器Filter

    万次阅读 多人点赞 2019-07-31 19:08:31
    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它...
  • java过滤器——filter的使用和配置

    千次阅读 2017-08-02 16:04:24
    在做DRP的过程中用到了filter。前几天昌哥和欢姐在小会议室向我们介绍了AOP的思想,用到filter时觉得它们两者特别相似。  如下图:     javaweb开发中,request和respon
  • Java过滤器原理方法

    2021-03-03 12:41:21
    过滤器可以对资源的请求和相应提供过滤功能,配置在web.xml文件中。过滤器可用来实现以下功能1. 权限过滤2. 登陆和检查验证3. 图像转换4. 数据压缩5. 加密6. 令牌验证7. 触发访问资源的事件8. XSL/T过滤9. Mime-type...
  • 1.获取application.properties的值 如userId=1 2.一般实体中采用@Value既可获取 @Value("userIdl") private String userId;...filter对象只会创建一次,init方法也只会执行一次 也就是程序刚刚启动的时.
  • 1 简介 Filter 也称之为过滤器,它是 Servlet 技术中最激动人心的技术之一,WEB 开发人员通过 Filter 技术,对 web 服务器管理的所有 web 资源:例如 JSP、Servlet,、静态图片文件或静态 HTML 文件等进行拦截,从而...
  • Filter中拦截路径配置有四种形式具体资源路径拦截:@WebFilter("/index.jsp") //这是指访问index.jsp的时候会经过过滤器具体目录拦截:@WebFilter("/user/*") //这是指访问user目录下的所有资源时会经过过滤器具体...
  • Servlet过滤器简介 Servlet过滤器实际上就是一个标准的java类,这个类通过实现Filter接口获得过滤器的功能。它在jsp容器启动的时候通过web.xml配置文件被系统加载。Servlet过滤器在接收到用户请求的时候被调用,当...
  • filter过滤器java的用法,配置文件怎样写,一看就明白
  • 里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域即我们常说的浏览器请求的同源策略。这篇文章主要介绍了JAVA通过Filter实现允许服务跨域请求,需要的朋友可以参考下
  • Java Web中Filter过滤器初始化方法init()执行了两次原因及解决方法 今天在学习java web过滤器Filter) 对于Filter中的init()初始化方法仅执行一次,即初始化一次 而运行Filter时 控制台却输出两次初始化的信息 如...
  • Java Web之过滤器Filter

    万次阅读 多人点赞 2018-07-31 16:58:40
    过滤器(Filter) 过滤器实际上就是对web资源进行拦截,做一些处理后再交给servlet。 通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理 大概流程图如下 应用场景 自动登录 统一设置...
  • Java 中的过滤器Filter

    2021-02-28 12:13:54
    Filter也就是java中的过滤器filter,联想到现实中的过滤器其实我们很容易想到它存在的意义和功能。但实际上总会有一些出入,本文我们就来详细地介绍一下这个在web开发中举足轻重的角色。Filter是是Servlet技术中...
  • 1.过滤器简介 过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断...过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端...
  • javaFilter自定义编码过滤器,防止中文乱码.
  • java filter过滤器

    2011-04-01 22:31:56
    过滤器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驱动。在servlet2.4中,过滤器同样可以用于请求分派器,但须在web.xml中声明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR...
  • Java过滤器Filter必备知识点

    千次阅读 2018-07-13 17:12:13
    过滤器  过滤器是处于客户端与服务器资源文件之间的一道... 如图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml...
  • web.xml文件配置CharsetEncodingFiltercom.hbyhhh.drp.Filter.CharsetEncodingFilterweb.xml文件配置CharsetEncodingFiltercom.hbyhhh.drp.Filter.CharsetEncodingFilterCharsetEncodingFilter/*实现接口的三个方法...
  • Java Filter过滤器+Listen监听器啥是过滤器顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学。但是java中的过滤器与生活中...
  • Java使用过滤器防止SQL注入XSS脚本注入

    千次阅读 多人点赞 2020-12-17 20:29:45
    后仔细想想,幸亏是注入的仅仅是... 定义过滤器 package com.cn.unit.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; im
  • java过滤器怎么写

    2021-02-26 12:07:08
    1.java过滤器中实现Filter的类怎么写web.xml配置文件SessionFiltercom.qhit.system.tools.SessionFilterSessionFilter/*java类public class ConnFilter extends HttpServlet implements Filter {public void ...
  • .java 表示所有以java为扩展名的资源都要经过该过滤器过滤 2,/abc/ * 表示abc文件夹下的资源需要经过该过滤器过滤 启动项目并执行该目标资源ServletDemo 结果如下所示: 说明了在执行目标servlet之前它先...
  • Java Filter过滤器(idea)

    千次阅读 2019-05-28 00:05:52
    注意xml配置顺序:监听器-过滤器-servlet

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,284
精华内容 53,313
关键字:

java过滤器filter配置方法

java 订阅