• SpringBoot 拦截器


    SpringBoot 拦截器

    在Spring Boot中,拦截器(Interceptor)是一个强大的工具,它允许你在请求处理之前、之后以及渲染视图之后执行代码。拦截器可以用于执行各种任务,如日志记录、身份验证、授权、数据转换等。

    Spring Boot中的拦截器通常实现HandlerInterceptor接口,该接口定义了三个方法:

    1. preHandle
      在请求处理之前调用。你可以在这里执行诸如验证、日志记录等操作。如果此方法返回false,则请求将不会继续处理。

    2. postHandle
      在请求处理之后但在视图渲染之前调用。你可以在这里对模型数据进行后处理。

    3. afterCompletion
      在整个请求处理完成后调用,即视图渲染之后。你可以在这里执行清理操作。

    拦截器流程图:

    在这里插入图片描述
    要在Spring Boot中使用拦截器,你需要执行以下步骤:

    创建拦截器类:

    这里以实现登录拦截器为例:

    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;
    import javax.servlet.http.HttpSession;
    
    @Component
    public class LoginInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // 在请求处理之前执行的代码(Controller方法调用之前)
            System.out.println("Pre-handle method is called");
            HttpSession session = request.getSession();
            Object loginUser = session.getAttribute("loginUser");
            if(loginUser == null){
                response.sendRedirect("/user/login");
                return false;
            }
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            // 在请求处理之后执行的代码(Controller方法调用之后)
            System.out.println("Post-handle method is called");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            // 在请求处理完成后执行的代码(即视图渲染之后)
            System.out.println("After-completion method is called");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    注册拦截器:

    import cn.qvtu.web.interceptor.LoginInterceptor;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class LoginConfig implements WebMvcConfigurer {
    
        @Autowired
        private LoginInterceptor loginInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            InterceptorRegistration registration = registry.addInterceptor(loginInterceptor);
            registration.addPathPatterns("/user/**"); // 拦截/user下的所有路径
            registration.excludePathPatterns(  // 排除特定路径
                    "/user/login",
                    "/user/register"
            );
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上面的配置中,addPathPatterns方法定义了哪些URL路径应该被拦截,而excludePathPatterns方法则定义了哪些路径应该被排除。
    拦截器是Spring MVC框架中一个非常强大的特性,通过它你可以对请求处理流程进行细粒度的控制

  • 相关阅读:
    Netty系列(四):源码解读 backlog 参数作用
    虚拟机没网,ping不同外网,ping不通主机,ping不通别的虚拟机
    vh、vw、vmin、vmax
    场景应用:你知道 i = i++;的含义么?
    操作系统——第一章概论(下)
    机器学习案例(十三):基于Python的电影推荐系统
    无人出租赛道洗牌开启?这家公司为什么会黄?
    信息系统项目管理师---第十三章项目合同管理历年考题
    Nginx架构详解
    php面向对象-抽象一个类
  • 原文地址:https://blog.csdn.net/qq_29385297/article/details/137428109