【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别

这篇具有很好参考价值的文章主要介绍了【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

🌹概念

拦截器(Interceptor)是一种软件设计模式,用于在应用程序处理请求或响应时对其进行拦截和修改。拦截器可以在整个应用程序中使用,用于执行跨越多个层的通用任务,如身份验证、授权、缓存、日志记录、性能计量等。

在Web开发中,拦截器通常用于在请求到达控制器之前或响应返回客户端之前对其进行修改。例如,在Spring框架中,可以使用拦截器来实现身份验证和授权检查,记录请求和响应的日志,以及处理全局异常等。

拦截器的工作方式是通过将其注册到应用程序的处理管道中,并在请求或响应传递过程中执行相应的操作。拦截器可以访问请求上下文、响应上下文和处理程序对象,从而允许它们访问和修改请求或响应的属性和状态。拦截器还可以决定是否将请求和响应继续传递到下一个处理程序或终止请求。

总之,拦截器是一种非常有用的设计模式,可以帮助开发人员在应用程序中实现通用的功能,提高代码的可重用性和可维护性。

⭐作用

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

拦截器是一种非常有用的设计模式,它可以在应用程序处理请求或响应时对其进行拦截和修改。以下是拦截器的几个常见用途:

  • 身份验证和授权:拦截器可以用于检查请求是否具有适当的凭据,并根据需要拒绝或允许请求。这使得开发人员能够轻松地实现身份验证和授权功能。
  • 缓存:拦截器可以用于缓存请求或响应数据,以便加快应用程序的性能。例如,在Web应用程序中,可以使用拦截器缓存静态资源,如CSS文件和图像。
  • 日志记录:拦截器可以用于记录请求和响应的详细信息,以便开发人员能够更好地了解应用程序的行为和性能。
  • 性能计量:拦截器可以用于测量应用程序的性能,并识别可能的瓶颈。例如,在Web应用程序中,可以使用拦截器跟踪页面加载时间,并标识慢速查询或资源。
  • 异常处理:拦截器可以用于处理应用程序中的异常情况,并提供友好的错误消息。例如,在Web应用程序中,可以使用拦截器捕获异常并显示自定义错误页面。

🎄快速入门

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

⭐入门案例代码实现

代码脚手架我传到网盘里面了,需要的同学请自取
我用夸克网盘分享了「tlias-web-management」,点击链接即可保存。
链接:https://pan.quark.cn/s/b98922faf182


首先我们创建interceptor类
【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java
写入下面的代码

package com.itheima.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
    @Override //目标资源方法运行前运行 返回true,放行  返回false 拦截
    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");
    }
}

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java


创建配置类
【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

写入下面的代码

package com.itheima.config;

import com.itheima.interceptor.LoginCheckInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration  //表明这个是配置类
public class WebConfig implements WebMvcConfigurer {
    
    @Autowired
    private LoginCheckInterceptor loginCheckInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //加入拦截器(加入的拦截器就是我们刚刚创建的拦截器)
        registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**");
    }
}

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

入门案例就完成了

🛸拦截路径

通过配置拦截路径,我们可以设置拦截什么路径,放行什么路径

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

🍔拦截器interceptor和过滤器filter的区别

接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HanglerInterceptor接口
拦截范围不同:过滤器filter会拦截所有的资源,而Interceptor中会拦截Spring环境的资源
【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

🎆登录校验

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

登录操作,我们需要使用LoginCheckFilter类,我们修改一下里面的代码

下面是修改后的代码

package com.itheima.interceptor;

import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@Component
@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {
    @Override //目标资源方法运行前运行 返回true,放行  返回false 拦截
    public boolean preHandle(HttpServletRequest  req, HttpServletResponse resp, Object handler) throws Exception {
        
            //获取请求的url
            String url = req.getRequestURL().toString();
            log.info("请求的url:{}",url);

            //判断请求url中是否包含有login,如果包含,说明是登录操作,进行放行
            if(url.contains("login")){
                log.info("登录操作,放行");
                return true;
            }
            //获取请求头的令牌(token)
            String jwt=req.getHeader("token");

            //判断令牌是否存在,如果不存在,返回错误结果(未登录)
            //hasLength()方法判断字符串是否有长度(是否为空)
            if (!StringUtils.hasLength(jwt)){
                log.info("请求头token为空,返回未登录的信息");
                Result error= Result.error("NOT_LOGIN");
                //使用阿里巴巴的fastJSON工具包,将对象转成json字符串
                String notLogin= JSONObject.toJSONString(error);
                //响应给浏览器
                resp.getWriter().write(notLogin);
                return false;
            }
            //解析token,如果解析失败,返回登录结果
            //jwt令牌
            try {
                JwtUtils.parseJWT(jwt);
            }catch (Exception e){
                e.printStackTrace();
                log.info("解析token失败,返回未登录的错误信息");
                Result error= Result.error("NOT_LOGIN");
                //使用阿里巴巴的fastJSON工具包,将对象转成json字符串
                String notLogin= JSONObject.toJSONString(error);
                //响应给浏览器
                resp.getWriter().write(notLogin);
                return false;
            }

            //放行
            log.info("令牌合法,放行");
            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");
    }
}

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别,SpringBoot,spring boot,spring,java

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!文章来源地址https://www.toymoban.com/news/detail-760633.html

到了这里,关于【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SpringBoot】过滤器,监听器,拦截器介绍

    通过两幅图我们可以理解拦截器和过滤器的特点 1、过滤器 过滤器是在请求进入tomcat容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。 理解上面这句话我们就可以知道,进入servlet之前,主要是两个参数:ServletRequest,

    2024年02月04日
    浏览(40)
  • Springboot中使用拦截器、过滤器、监听器

    Javaweb三大组件:servlet、Filter(过滤器)、 Listener(监听器) SpringBoot特有组件:Interceptor(拦截器) 过滤器、拦截器、监听器、AOP(后续文章介绍)、全局异常处理器(后续文章介绍)是搭建系统框架时,经常用到的部分,全局异常处理器的作用很明显,就是处理接口执行

    2024年02月03日
    浏览(24)
  • SpringBoot2.0(过滤器,监听器,拦截器)

    使用Servlet3.0的注解进行配置 启动类里面增加 @ServletComponentScan ,进行扫描 新建一个Filter类,implements Filter ,并实现对应接口 @WebFilter 标记一个类为Filter,被spring进行扫描 urlPatterns:拦截规则,支持正则 控制chain.doFilter的方法的调用,来实现是否通过放行, 不放行的话,web应用

    2024年02月07日
    浏览(27)
  • SpringBoot 统计API接口用时该使用过滤器还是拦截器?

    统计请求的处理时间(用时)既可以使用 Servlet 过滤器(Filter) ,也可以使用 Spring 拦截器(Interceptor) 。两者都可以在请求处理前后插入自定义逻辑,从而实现对请求响应时间的统计。 如果你需要在更底层、与框架无关的地方记录所有请求(包括静态资源请求)的处理时间

    2024年01月18日
    浏览(25)
  • 【Spring】Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    2024年02月13日
    浏览(33)
  • 过滤器和拦截器的辨析

    过滤器和拦截器都是为了在请求到达目标处理器(Servlet或Controller)之前或者之后插入自定义的处理逻辑 过滤器 : 遵循AOP(面向切面编程)思想实现,基于Servlet规范提供的Filter接口,它是位于客户端请求与服务器响应之间的一个组件,依赖于Servlet容器。当请求到达服务器时,过滤器

    2024年03月11日
    浏览(31)
  • JAVA中的拦截器、过滤器

    相关解释:拦截器依赖于页面有访问controller的操作,且属于SpringMVC体系的动态拦截调用机制,是java中AOP思想的运用。 来看看源码作者的注释: 其中倒数第二段话,描述其类似于过滤器,但其特点只允许使用自定义预处理,不能处理程序本身。此处可体现AOP思想。 过滤器是

    2024年02月13日
    浏览(27)
  • 过滤器,监听器与拦截器的区别

    ​ 过滤器和监听器不是Spring MVC中的组件,而是Servlet的组件,由Servlet容器来管理。拦截器是Spring MVC中的组件,由Spring容器来管理 ​ Servlet过滤器与Spring MVC 拦截器在Web应用中所处的层次如下图所示: 过滤器是Servlet的高级特性之一,是实现Filter接口的Java类。其基本功能就是对

    2024年02月14日
    浏览(34)
  • Spring Boot拦截器与过滤器的区别

    在使用Spring Boot开发Web应用程序时,您可能需要在处理请求之前或之后执行某些操作。这些操作可以包括身份验证、日志记录、性能监测等。在这种情况下,您可以使用两种不同的机制:拦截器和过滤器。本文将介绍这两种机制及其区别,并提供一些示例代码来演示如何在S

    2024年02月08日
    浏览(46)
  • spring boot 过滤器&拦截器与aop

    在使用 Spring 框架时,可以通过在 web.xml 配置文件中注册过滤器,使其在请求进入 Spring 前就能够进行预处理。这样可以在请求进入 Spring MVC 的 DispatcherServlet 之前,对请求进行拦截、修改或者过滤。 过滤器在 Spring 中的应用场景包括但不限于: 字符编码过滤:通过过滤器,在

    2024年02月01日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包