springboot过滤器和拦截器的实例代码

 更新时间:2021年07月28日 14:40:27   作者:liuxiaopeng  
这篇文章主要介绍了springboot过滤器和拦截器的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

拦截器与过滤器

  在讲Spring boot之前,我们先了解一下过滤器和拦截器。这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的。在分析两者的区别之前,我们先理解一下AOP的概念,AOP不是一种具体的技术,而是一种编程思想。在面向对象编程的过程中,我们很容易通过继承、多态来解决纵向扩展。 但是对于横向的功能,比如,在所有的service方法中开启事务,或者统一记录日志等功能,面向对象的是无法解决的。所以AOP——面向切面编程其实是面向对象编程思想的一个补充。而我们今天讲的过滤器和拦截器都属于面向切面编程的具体实现。而两者的主要区别包括以下几个方面:

  1、Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。

  2、Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理的方式来执行。

  3、Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。

过滤器

@Component
public class AddResponseHeaderFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        String header = response.getHeader("Set-Cookie");
        Collection<String> headerNames = response.getHeaderNames();
        System.out.println("___________________");
        System.out.println(header);
        System.out.println("___________________");
        filterChain.doFilter(request, response);
    }
}

拦截器

public class HttpResponseInterceptorHandler implements HandlerInterceptor {
    // 实现HandlerInterceptor  或者 继承HandlerInterceptorAdapter都可以,如果想看着简洁就使用后者
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        response.addHeader("content-test","123");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

到此这篇关于springboot过滤器和拦截器的文章就介绍到这了,更多相关springboot过滤器和拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nacos启动出现failed to req API:/nacos/v1/ns/instance after all servers问题

    Nacos启动出现failed to req API:/nacos/v1/ns/insta

    这篇文章主要介绍了Nacos启动出现failed to req API:/nacos/v1/ns/instance after all servers问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java设计模式—静态代理模式(聚合与继承方式对比)

    java设计模式—静态代理模式(聚合与继承方式对比)

    下面小编就为大家带来一篇java设计模式—静态代理模式(聚合与继承方式对比)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • JAVA十大排序算法之堆排序详解

    JAVA十大排序算法之堆排序详解

    这篇文章主要介绍了java中的冒泡排序,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考
    2021-08-08
  • springboot项目中统一时间格式处理方法

    springboot项目中统一时间格式处理方法

    JacksonConfiguration主要用于配置JSON的序列化和反序列化,而LocalDateTimeFormatter则用于处理请求和响应中的LocalDateTime格式,这两个配置项在SpringBoot项目中至关重要,确保数据格式的正确处理和传输
    2024-10-10
  • Java遍历json字符串取值的实例

    Java遍历json字符串取值的实例

    下面小编就为大家分享一篇Java遍历json字符串取值的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • log4j2.xml文件详解及在日志中加入全局guid

    log4j2.xml文件详解及在日志中加入全局guid

    这篇文章主要介绍了log4j2.xml文件详解及在日志中加入全局guid,基于很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 解决子线程无法访问父线程中通过ThreadLocal设置的变量问题

    解决子线程无法访问父线程中通过ThreadLocal设置的变量问题

    这篇文章主要介绍了解决子线程无法访问父线程中通过ThreadLocal设置的变量问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • java中treemap和treeset实现红黑树

    java中treemap和treeset实现红黑树

    这篇文章主要为大家详细介绍了java中treemap和treeset实现红黑树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 分析Java非阻塞算法Lock-Free的实现

    分析Java非阻塞算法Lock-Free的实现

    非阻塞算法一般会使用CAS来协调线程的操作。虽然非阻塞算法有诸多优点,但是在实现上要比基于锁的算法更加繁琐和负责。本文将会介绍两个是用非阻塞算法实现的数据结构。
    2021-06-06
  • Java图片读取ImageIO.read()报错问题及解决

    Java图片读取ImageIO.read()报错问题及解决

    在使用imageio库读取图片时,如果路径中包含中文,可能会导致读取失败,解决方法是将路径中的中文字符进行转义处理,可以使用ImageUtil.java工具类进行路径转义,从而避免错误,这是一个常见问题,希望本文的解决方案能帮助到遇到相同问题的开发者
    2024-10-10

最新评论