zoukankan      html  css  js  c++  java
  • Spring 中拦截器、过滤器和切面的区别

    在Spring中,当一个请求到来,我们可以对其进行预处理,以及对返回的结果进行再加工。Spring提供了三个不同的工具来实现这个功能,分别对应不同的场景,刚好有个项目里都用到了,总结一下。

    三种功能简介

    过滤器

    实现方法

    需要实现 javax.servlet.Filter 接口,或者继承 org.springframework.web.filter.OncePerRequestFilter 类,并注册该过滤器(@WebFilter),并在该注解中指定需要拦截哪些请求。

    可捕获的参数

    • request : 请求的参数,可以通过HttpServletRequestWrapper来修改传入的URI、头信息等;
    • response : 返回体
    • filterChain : 过滤链(待补充)

    拦截器

    实现方法

    需要实现 org.springframework.web.servlet.HandlerInterceptor 接口,并在 WebMvcConfigurer 中调用addInterceptors 添加拦截器和对应的拦截路径。

    可捕获的参数

    • request : 请求的参数,可以通过HttpServletRequestWrapper来修改传入的URI、头信息等;
    • response : 返回体
    • handler :

    切面

    实现方法

    使用@Aspect标记为切面类,使用@Pointcut和@Around、@Before、@After、@AfterReturning、@AfterThrowing来确定拦截位置。

    可捕获的参数

    对应方法的参数

    三种的区别

    • 执行顺序:过滤器->拦截器->切面
    • 过滤器、拦截器属于请求层面的拦截;切面属于方法层面的拦截
  • 相关阅读:
    cogs 775. 山海经
    [HZOI 2016][Tyvj 1729]文艺平衡树 这道题我真是哭了,调了一下午,一晚上
    几种平衡树
    bzoj1124 [POI2008]枪战Maf
    [Usaco2007 Open]Fliptile 翻格子游戏
    团队冲刺08
    团队冲刺07
    团队冲刺06
    团队冲刺05
    团队冲刺04
  • 原文地址:https://www.cnblogs.com/pravez/p/13516161.html
Copyright © 2011-2022 走看看