首页 > 其他分享 >Interceptor 拦截器

Interceptor 拦截器

时间:2024-07-12 18:41:21浏览次数:11  
标签:拦截器 preHandle 请求 MyInterceptor1 import Interceptor afterCompletion

1、拦截器的介绍

  • 拦截器使用场景:
  1. 登录验证:对于需要登录才能访问的网址,使用拦截器可以判断用户是否已登录,如果未登录则跳转到登录页面。
  2. 权限校验:根据用户权限对部分网址进行访问控制,拒绝未经授权的用户访问。
  3. 请求日志:记录请求信息,例如请求地址、请求参数、请求时间等,用于排查问题和性能优化。
  4. 更改响应:可以对响应的内容进行修改,例如添加头信息、调整响应内容格式等。
  • 拦截器和过滤器的简单区别:
  1. 过滤器更注重在请求和响应的流程中进行处理,可以修改请求和响应的内容,例如设置编码和字符集、请求头、状态码等。
  2. 拦截器则更加侧重于对控制器进行前置或后置处理,在请求到达控制器之前或之后进行特定的操作,例如打印日志、权限验证等。

2、拦截器的实现

实现拦截器需要实现HandlerInterceptor接口,并且重写preHandlepostHandleafterCompletion,事实上即使不重写也是没问题的。该方法实际上有默认实现。其中preHandle需要一个boolean的返回值。如果返回值true,程序放行。

package com.powernode.Interceptors;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
public class MyInterceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor1 preHandle 执行.......");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor1 postHandle 执行.......");
    }

    @Override
   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor1 afterCompletion 执行.......");
    }
}

然后我们需要在SpringMVC框架的配置文件,对拦截器进行配置。有两钟方式。

方式一:

  <!--配置拦截器-->
    <mvc:interceptors>
        <bean class="com.powernode.Interceptors.MyInterceptor1"></bean>
    </mvc:interceptors>

方式二:
我的拦截器类名是MyInterceptor1,在这里我们需要把首字母小写。

   <mvc:interceptors>
        <ref bean="myInterceptor1"></ref>
    </mvc:interceptors>

测试:

3、拦截器的高级配置

设置拦截器拦截路径:

    <mvc:interceptors>
        <mvc:interceptor>
            <!--拦截所有路径-->
            <mvc:mapping path="/**"/>
            <!--除 /test 路径之外-->
            <mvc:exclude-mapping path="/test"/>
            <!--拦截器-->
            <ref bean="myInterceptor1"/>
        </mvc:interceptor>
    </mvc:interceptors>

4、多个拦截器执行顺序

Filter、Servlet、Interceptor、Controller的执行顺序:

设置多个拦截器

    <mvc:interceptors>
        <ref bean="myInterceptor2"></ref>
        <ref bean="myInterceptor3"></ref>
        <ref bean="myInterceptor1"></ref>
    </mvc:interceptors>

如果所有拦截器的 preHandle都返回truepreHandle按照排布顺序执行。 postHandleafterCompletion按照和排布顺序相反顺序执行。

只要有一个拦截器preHandle返回false,任何postHandle都不执行。但返回false的拦截器的前面的拦截器按照逆序执行afterCompletion
现在拦截器按照顺序排布,同时让拦截器2的preHandle返回false

标签:拦截器,preHandle,请求,MyInterceptor1,import,Interceptor,afterCompletion
From: https://www.cnblogs.com/bobospace/p/18297787

相关文章

  • MyBatis拦截器在实际项目中的应用
    MyBatis 是一个流行的Java持久层框架,它简化了数据库访问的复杂性,为开发者提供了强大的功能。其中,MyBatis拦截器是一个非常有用的特性,可以帮助开发者灵活地解决各种问题。一、MyBatis拦截器1.1从执行SQL语句的核心流程说起在MyBatis中,要执行一条SQL语句,会涉及......
  • 讲解一下Axios源码中,拦截器是怎么实现的
    面试中我们经常会被问道Axios的原理是怎么样的,它的拦截器是怎么实现的?下面我们来简单讲一下Axios的拦截器是如何实现的。Axios的拦截器实现基于Axios的核心原理,即Axios实例是一个包含请求和响应拦截器堆栈的对象。当发出请求或接收响应时,Axios会遍历这些拦截器,并按照添加......
  • 拦截器和过滤器适用场景,及其使用倾向
    拦截器(Interceptor)和过滤器(Filter)在Web应用中扮演着不同的角色,尽管它们都可以用来拦截请求和响应,但它们的适用场景和工作原理有显著的不同。以下是它们各自的一些典型适用场景:过滤器(Filter)过滤器是JavaEE的一部分,它由Servlet容器管理,可以应用于所有进出Web应用的请求和响应。过......
  • SpringBoot拦截器中获取注解、拦截器中注入Service
    拦截器中获取注解来源:https://blog.csdn.net/wangmx1993328/article/details/81030268/publicclassJWTInterceptorimplementsHandlerInterceptor{privateSysSettingServicesysSettingService;//构造函数传入ServicepublicJWTInterceptor(SysSettingServ......
  • [解决]Acton拦截器读取body内容后,方法内无法读取到body内容
    注意:1、在拦截器处理Stream时,应避免使用using语句包裹StreamReader,因为这会导致Stream在读取完成后关闭,进而阻止后续的读取尝试2、考虑到性能和稳定性,应尽可能使用异步方法读取Streamreader.ReadToEndAsync()3、当在拦截器中读取并处理Body后,记得将Stream位置重置context......
  • springboot项目登陆校验————基于Jwt令牌和Fliter / Interceptor
    springboot项目登陆校验————基于Jwt令牌和Fliter/Interceptor文章目录springboot项目登陆校验————基于Jwt令牌和Fliter/Interceptor1.概述2.Jwt令牌2.1Jwt令牌的组成2.2Jwt登录认证流程2.3代码实现3.方法1:Fliter过滤器3.1简介3.1代码实现4.方法2:Interce......
  • 带你学习Mybatis之拦截器
    mybatis拦截器mybatis拦截器也叫做插件,mybatis允许开发者自定义拦截器对SQL语句执行过程中的某一个点进行拦截。默认mybatis允许拦截Mybatis中的四大核心对象:Executor中的方法、ParameterHandler的方法、ResultSetHandler的方法以及StatementHandler中的方法Executor......
  • .NET Core 3.x 基于AspectCore实现AOP,实现事务、缓存拦截器
    最近想给我的框架加一种功能,就是比如给一个方法加一个事务的特性Attribute,那这个方法就会启用事务处理。给一个方法加一个缓存特性,那这个方法就会进行缓存。这个也是网上说的面向切面编程AOP。AOP的概念也很好理解,跟中间件差不多,说白了,就是我可以任意地在方法的前面或后面添加代码......
  • Angular项目简单使用拦截器 httpClient 请求响应处理
    1:为啥要使用拦截器httpClient请求响应处理,其作用我们主要是:目前我的Angular版本是Angular17.3,版本中实现请求和响应的拦截处理了。这种机制非常适合添加如身份验证头、错误统一处理、日志记录等功能。======具体的操作步骤=======2:注入服务:nggsservices/myhttp-intercept......
  • 【JavaWeb】基于Filter和Interceptor实现登录认证
    前言HTTP协议是无状态协议,指的是每一次请求都是独立的,下一次请求并不会携带上一次请求的数据。因为HTTP协议是无状态的,两次请求之间是独立的,所以是无法判断这个员工到底登陆了没有。登录校验的具体的实现思路可以分为两部分:在员工登录成功后,需要将用户登录成功的信息存起来,记......