`

拦截器和过滤器

阅读更多

过滤器

过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。
作用
请求和回应的过滤,传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。

Servlet过滤器的基本原理
在请求进入容器之后,还未进入Servlet之前进行预处理;在请求结束返回给前端之前进行后期处理。处理完成后,它会交给下一个过滤器处理,直到请求发送到目标为止。

拦截器

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。比如日志,安全等。
拦截器链,就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
一般拦截器方法都是通过动态代理的方式实现。

作用
比如通过它来进行权限验证,或者判断用户是否登陆,或者是像12306 判断当前时间是否是购票时间。

区别

  ①拦截器是基于动态代理的,而过滤器是基于函数回调。
  ②拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器。
  ③拦截器可以在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调用一次。
  ④拦截器可以利用依赖注入,因此在Spring框架程序中,优先拦截器。

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...");
    }

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");
    }

看一下执行顺序

 

 

 

分享到:
评论

相关推荐

    拦截器和过滤器的区别

    ### 拦截器与过滤器的区别 ...综上所述,虽然拦截器和过滤器都能实现对请求的预处理和后处理,但二者之间存在着本质上的不同。开发者在选择使用哪种技术时,应根据实际需求及项目环境的特点做出合理的选择。

    struts2工作原理及拦截器和过滤器

    Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...

    基于Java的Spring框架拦截器和过滤器设计源码

    Spring框架拦截器和过滤器:基于Java开发,包含34个文件,包括28个Java类...该项目是关于Spring框架的拦截器和过滤器的设计,过滤器是Java Web的三大组件之一,而拦截器是Spring框架提供的用于拦截和处理请求的组件。

    拦截器和过滤器的关系图.md

    清楚解析拦截器和过滤器的关系

    简单理解Struts2中拦截器与过滤器的区别及执行顺序

    Struts2 中拦截器与过滤器的区别及执行顺序 Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器...

    Spring Boot拦截器和过滤器实例解析

    Spring Boot拦截器和过滤器实例解析 Spring Boot中的拦截器和过滤器是两种常见的技术手段,用于实现横向的功能扩展,如记录日志、身份验证、事务管理等。它们都是面向切面编程(AOP)的具体实现,能够帮助开发者更...

    spring boot 拦截器拦截/Filter 过滤session案例

    在本文中,我们将深入探讨如何在...拦截器和过滤器的选择取决于具体需求,拦截器更适合Spring MVC的控制流,而过滤器则适用于更底层的HTTP请求处理。后续使用token认证的方式将进一步提升系统的可扩展性和安全性。

    拦截器过滤器.rar

    综上所述,"拦截器过滤器.rar"这个压缩包文件是一个关于如何在Web应用中实施拦截器和过滤器的学习资源,涵盖了拦截器与过滤器的基本概念、用法以及可能的问题处理。通过学习和实践这些示例,你可以提升自己在处理...

    SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

    3. **控制流程**:拦截器可以通过`preHandle`方法的返回值决定是否继续执行后续的拦截器和控制器,而过滤器无此功能,它总是会按照配置的顺序依次执行。 4. **使用场景**:拦截器常用于业务逻辑层面的处理,如权限...

    Struts2编写的通用(拦截器,过滤器)Filter

    这个名为"Struts2编写的通用(拦截器,过滤器)Filter"的项目,主要目标是防止用户非法访问未授权的页面,确保只有登录用户才能访问特定的资源。 **拦截器(Interceptor)** 拦截器是Struts2框架的核心特性之一,它...

    struts03:拦截器、过滤器与拦截器的区别、文件上传

    综上所述,拦截器和过滤器在Web开发中各自扮演着重要角色,而文件上传作为常见的业务需求,可以通过Struts2框架中的拦截器机制进行高效且安全的实现。理解它们的工作原理和区别,有助于提高开发效率和代码质量。

    Struts 2 过滤器和拦截器的区别

    通过对Struts 2框架中过滤器和拦截器的核心区别以及具体应用场景的分析,我们可以看到,虽然两者都能实现类似的功能(如权限验证),但它们的工作方式和技术基础存在明显差异。选择合适的技术方案取决于实际项目的...

    拦截器与过滤器[定义].pdf

    拦截器和过滤器是两种在Java Web开发中广泛使用的组件,它们主要负责处理HTTP请求,但它们的作用方式和应用场景有所不同。下面将详细解释这两种技术及其区别。 **拦截器(Interceptor)** 拦截器主要应用于框架中...

    浅谈springMVC拦截器和过滤器总结

    在Spring MVC中,有两种常见的机制可以用来对访问...总结,拦截器和过滤器都是在请求处理过程中进行增强的重要工具,它们各自有其独特的优势和适用场景。开发者可以根据实际需求选择合适的方式来实现对URL的拦截处理。

    拦截器和控制器的区别

    拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求...

    Filter过滤器与Interceptor拦截器

    Filter过滤器与Interceptor拦截器有很多相似

    浅谈基于过滤器与拦截器的用户访问控制

    浅谈基于过滤器与拦截器的用户访问控制,stuts2中拦截器和过滤器的应用

    拦截器解决中文乱码问题

    如果已经有一个处理编码的过滤器存在,我们需要确保拦截器和过滤器之间的工作不会冲突。 6. **测试与调试**:在实现和配置好拦截器后,进行充分的测试是必不可少的。可以尝试发送包含中文的请求,检查是否还有乱码...

Global site tag (gtag.js) - Google Analytics