精华内容
下载资源
问答
  • Java拦截器和过滤器

    2020-01-09 17:07:14
    Java中关于函数回调反射机制的介绍 拦截器和过滤器区别 Spring Boot实战:拦截器过滤器(看看就好,大体还是可以的) SpringBoot - 拦截器和过滤器(主要用这个) ...
    展开全文
  • 过滤器和拦截器区别:  ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。  ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。  ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的...

    过滤器和拦截器的区别:

      ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
      ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
      ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
      ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
      ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

      ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

    拦截器可以获取ioc中的service bean实现业务逻辑,拦截器可以获取ioc中的service bean实现业务逻辑,拦截器可以获取ioc中的service bean实现业务逻辑,

     

    触发时机

    触发时机

    触发时机

    有个专业词语叫触发时机

    1.过滤器和拦截器触发时机不一样:

      过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。

    总结:过滤器包裹住servlet,servlet包裹住拦截器。

    如下图所示:

     

     

    2.过滤器的触发时机是容器后,servlet之前,所以过滤器的doFilter(

    ServletRequest request, ServletResponse response, FilterChain chain

    )的入参是ServletRequest ,而不是httpservletrequest。因为过滤器是在httpservlet之前。

     

    10.过滤器

     @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("before...");
            chain.doFilter(request, response);
            System.out.println("after...");
        }
    chain.doFilter(request, response);这个方法的调用作为分水岭。事实上调用Servlet的doService()方法是在chain.doFilter(request, response);这个方法中进行的。
    
    事实上调用Servlet的doService()方法是在chain.doFilter(request, response);这个方法中进行的。
    
    
    
     

    1.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。

     

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("before...");
            chain.doFilter(request, response);
            System.out.println("after...");
        }

     

      chain.doFilter(request, response);这个方法的调用作为分水岭。事实上调用Servlet的doService()方法是在chain.doFilter(request, response);这个方法中进行的。

     

      2.拦截器是被包裹在过滤器之中的。

     

        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion");
        }

     

     

     

      a.preHandle()这个方法是在过滤器的chain.doFilter(request, response)方法的前一步执行,也就是在 [System.out.println("before...")][chain.doFilter(request, response)]之间执行。

     

      b.preHandle()方法之后,在return ModelAndView之前进行,可以操控Controller的ModelAndView内容。

     

      c.afterCompletion()方法是在过滤器返回给前端前一步执行,也就是在[chain.doFilter(request, response)][System.out.println("after...")]之间执行。

     

    3.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。所以过滤器、拦截器、service()方法,dispatc()方法的执行顺序应该是这样的,大致画了个图:其实非常好测试,自己写一个过滤器,一个拦截器,然后在这些方法中都加个断点,一路F8下去就得出了结论。

     

    4.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。

    5.,SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。

    6.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。

     

    7.还有,拦截器是spring容器的,是spring支持的,

     

     

    总结:拦截器功在对请求权限鉴定方面确实很有用处,在我所参与的这个项目之中,第三方的远程调用每个请求都需要参与鉴定,所以这样做非常方便,而且他是很独立的逻辑,这样做让业务逻辑代码很干净。和框架的其他功能一样,原理很简单,使用起来也很简单,大致看了下SpringMVC这一部分的源码,其实还是比较容易理解的。

      我们项目中仅仅用到了preHandle这个方法,而未用其他的,框架提供了一个已经实现了拦截器接口的适配器类HandlerInterceptorAdapter,继承这个类然后重写一下需要用到的方法就行了,可以少几行代码,这种方式Java中很多地方都有体现。

     

     

    过滤器在web.xml中配置:

    (1)因为一开始在过滤器中映射的url-pattern填写路径是*.action。所有的action要经过它的过滤。<url-pattern>*.action</url-pattern>

    (2)因为在web.xml中配置了过滤器,所以,执行过程所有程序都经过struts2过滤器(路径是:/*),首先过滤自己相关的程序,如xx.action,先处理,如果是.html或者.jsp就不会处理,直接放行。

    解决方法:把过滤器映射路径改为:/*  ,即全部过滤处理。

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

    过滤器和拦截器不同,struts中拦截器是核心。

    还有一篇关于两者介绍的博客:https://blog.csdn.net/qq_36411874/article/details/53996873

    上面的配置摘自该片博客

    展开全文
  • 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调  2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器  3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用  4、拦截器...
    1、拦截器是基于java的反射机制的,而过滤器是基于函数回调  
    2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器  
    3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用  
    4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能  
    5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 
     

         拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。  

    下面通过实例来看一下过滤器和拦截器的区别:  

    使用拦截器进行/admin 目录下jsp页面的过滤  

    <package name="newsDemo" extends="struts-default"  
            namespace="/admin">  
            <interceptors>  
                <interceptor name="auth" class="com.test.news.util.AccessInterceptor" />  
                <interceptor-stack name="authStack">  
                    <interceptor-ref name="auth" />  
                </interceptor-stack>  
            </interceptors>  
            <!-- action -->  
            <action name="newsAdminView!*" class="newsAction"  
                method="{1}">  
                <interceptor-ref name="defaultStack"/>  
                <interceptor-ref name="authStack">  
                </interceptor-ref>  

    下面是我实现的Interceptor class:  

    package com.test.news.util;  

    import java.util.Map;  

    import com.opensymphony.xwork2.ActionContext;  
    import com.opensymphony.xwork2.ActionInvocation;  
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
    import com.test.news.action.AdminLoginAction;  

    /**  
    @author chaoyin  
    */  

    public class AccessInterceptor extends AbstractInterceptor {  

        private static final long serialVersionUID = -4291195782860785705L;  

        @Override  
        public String intercept(ActionInvocation actionInvocation) throws Exception {  
             ActionContext actionContext = actionInvocation.getInvocationContext();  
             Map session = actionContext.getSession();  
             
            //except login action  
             Object action = actionInvocation.getAction();  
            if (action instanceof AdminLoginAction) {  
                return actionInvocation.invoke();  
             }  
            //check session  
            if(session.get("user")==null ){  
                return "logout";  
             }  
            return actionInvocation.invoke();//go on  
         }  

    }  

           过滤器:是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.  

    使用过滤器进行/admin 目录下jsp页面的过滤,首先在web.xml进行过滤器配置:  

        <filter>  
            <filter-name>access filter</filter-name>  
            <filter-class>  
                 com.test.news.util.AccessFilter  
            </filter-class>  
        </filter>  
        <filter-mapping>  
            <filter-name>access filter</filter-name>  
            <url-pattern>/admin/*</url-pattern>  
        </filter-mapping>  


    下面是过滤的实现类:  

    package com.test.news.util;  

    import java.io.IOException;  

    import javax.servlet.Filter;  
    import javax.servlet.FilterChain;  
    import javax.servlet.FilterConfig;  
    import javax.servlet.ServletException;  
    import javax.servlet.ServletRequest;  
    import javax.servlet.ServletResponse;  
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
    import javax.servlet.http.HttpSession;  


    public class AccessFilter implements Filter {  

    /**  
    @author chaoyin  
    */  
         
        public void destroy() {  

         }  

        public void doFilter(ServletRequest arg0, ServletResponse arg1,  
                 FilterChain filterChain) throws IOException, ServletException {  
             HttpServletRequest request = (HttpServletRequest)arg0;  
             HttpServletResponse response = (HttpServletResponse)arg1;  
             HttpSession session = request.getSession();  
            if(session.getAttribute("user")== null && request.getRequestURI().indexOf("login.jsp")==-1 ){  
                 response.sendRedirect("login.jsp");  
                return ;  
             }  
             filterChain.doFilter(arg0, arg1);  

         }  

        public void init(FilterConfig arg0) throws ServletException {  

         }  

    }
    展开全文
  • 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调  2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器  3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用  4、拦截器...

    主要的区别:

    1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 
    2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 
    3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 
    4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 
    5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 

         拦截器:是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。 

    1.过滤器

    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁,

    2.监听器

    现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

    3.拦截器

    拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制。拦截器不是在web.xml,比如struts在struts.xml中配置。


    展开全文
  • java web拦截器和过滤器区别过滤器什么过滤器?Servlet过滤器的基本原理过滤器:只想要在一堆东西里面选个B拦截器什么拦截器拦截器的实现原理拦截器:把水流变小点,把鱼都拦住!顺便发个电拦截器过滤器的...
  • 拦截器过滤器类似,作用:拦截资源。 区别过滤器可以拦截所有资源,包括jsp/html/image/servlet/action等资源的请求; 拦截器只能拦截action请求,struts2的概念。 转载于:...
  • 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 4、拦截器可以...
  • Java拦截器过滤器

    2016-11-03 14:18:31
    @、拦截器是基于java的反射机制的,而过滤器是基于函数回调  @、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器  @、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用  @、拦截器...
  • 1.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。 @Override public void doFilter(ServletRequest request, ...
  • 前言:   最近小咸儿在学习Vue拦截器,在网上搜索资源的时候,突然发现原来Java有拦截器和过滤器,这就吸引小咸儿了,所以特地总结一片博客记录下来。 内容: 拦截器 过滤器 ...
  • 今天带大家分析java拦截器和过滤器区别,文中非常详细的解释说明,对正在学习java的小伙伴们很好的帮助,需要的朋友可以参考下 一、过滤器(filter) 过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,...
  • 拦截器和过滤器有什么区别?程序中是先执行拦截器还是过滤器?      1、拦截器是基于 Java 的反射机制的,而过滤器是基于函数回调。      2、拦截器不依赖于 ...
  • 过滤器: 1.基于Servlet框架 2.Oracle公司的任何Java Web框架都可以用 3.可以拦截任何资源,包括 .jsp .java .html等等 拦截器: 1.基于SpringMvc框架, 2.只有导入SpringMvc相关包的项目才可以用 3.只能...
  • 配置图文,超详细!!SpringMVC拦截器Interceptor详解,多个拦截器的执行顺序,拦截器进行权限判断日志记录,拦截器和过滤器区别
  • 主要介绍了通过实例解析java过滤器和拦截器区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了Java中的拦截器、过滤器、监听器用法,详细分析了Java拦截器过滤器、监听器的功能、使用方法及相关注意事项,需要的朋友可以参考下
  • java拦截器过滤器,监听器的区别和执行顺序 2016-12-06 08:26 3458人阅读 评论(0) 收藏 举报 一:拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用...
  • <h1 id="java基础之拦截器和过滤器">Java基础之拦截器和过滤器 拦截器是AOP( Aspect-Oriented Programming)的一种实现,底层通过动态代理模式
  • 一、理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack)。...
  • 转:Java过滤器与SpringMVC拦截器关系和区别Java监听器
  • 本文收录于JavaStarter ,里面我完整的Java系列文章,学习或面试都可以看看 (一)什么过滤器 过滤器Filter基于Servlet实现,过滤器的主要应用场景是对字符编码、跨域等问题进行过滤。Servlet的工作原理是拦截...
  • JAVA拦截器VS过滤器 拦截器的实现原理:  拦截器方法是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的...
  • Java中增加自定义的拦截器和过滤器

    千次阅读 2019-01-15 18:43:02
    拦截器和过滤器Java开发中经常用到的,Java中增加自定义的拦截器和过滤器,方式分别如下, 一,Java的springboot增加自定义拦截器 1,首先各个拦截器类需要事先定义,并实现 org.springframework.web.servlet....
  • 一、AOP:面向切面编程,Java Web中两个常用的技术:拦截器过滤器 二、拦截器  1、定义:在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作  2、原理:大部分时候,拦截器方法都是通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,333
精华内容 30,533
关键字:

java拦截器和过滤器有什么区别

java 订阅