柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

  • 拓展技术

  • 框架技术

  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

    • SpringMVC
    • SpringMVC 静态资源的访问
    • SpringMVC 请求接收
    • SpringMVC 重定向和转发
    • SpringMVC 异常
    • SpringMVC 拦截器
    • SpringMVC 上传&下载
    • SpringMVC RESTful API
  • SpringBoot

  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • SpringMVC
柏竹
2021-07-16

SpringMVC 拦截器

# SpringMVC 拦截器

Spring MVC 提供了 Interceptor 拦截器机制,用于请求的预处理和后处理

Spring MVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等功能上。

了解Java Servlet 的过滤器:JavaWeb学习记录 Servlet过滤监听应用 (opens new window)

拦截器定义

在 Spring MVC 框架中定义一个拦截器需要对拦截器进行定义和配置

  • 拦截器类 实现 HandlerInterceptor接口

  • 配置文件 .xml 添加 拦截器

    <!--    拦截器集合-->
    <mvc:interceptors>
        <!--指定干活的拦截器-->
        <mvc:interceptor>
            <!--请求规则-->
            <mvc:mapping path="/**"/>
         	<!--指定类 拦截器(前提:继承接口)-->
            <bean class="com.interceptor.MyInterceptor" id="interceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
    

HandlerInterceptor接口 有三个方法

package org.springframework.web.servlet;

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

import org.springframework.lang.Nullable;
import org.springframework.web.method.HandlerMethod;

public interface HandlerInterceptor {
	
    /**
     * 执行点:控制器方法执行前
     * 应用场景:登录验证、...
     * @return 是否通行,控制器方法;false:进制通行至控制器
     */
	default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		return true;
	}
	
    /**
     * 执行点:在控制器方法执行后,在视图返回前,有机会修改返回值
     * 应用场景:日志、登录ip、时间、...
     */
	default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable ModelAndView modelAndView) throws Exception {
	}
	
    /**
     * 执行点:在控制器方法执行后,在视图返回后,没机会修改返回值
     * 应用场景:全局资源的操作
     */
	default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable Exception ex) throws Exception {
	}

}

拦截器工作流程

SpringMVC 工作流程:

拦截器 方法拦截点:

  • preHandle( ):该方法在控制器的处理请求方法前执行(处理器适配器HandlerAdaptor处理前的区间),返回值表示是否中断后续操作
  • postHandle( ):该方法在控制器的处理请求方法调用之后、解析视图之前执行,可以通过此方法对请求域中的 模型 和 视图 做进一步的修改
  • afterCompletion( ):该方法在控制器的处理请求方法执行完成后执行,即视图渲染结束后执行,可以通过此方法实现一些资源清理、记录日志信息等工作

应用实现:

应用前提:

  • 需要 xml配置文件添加 拦截器

  • 拦截器类 实现 HandlerInterceptor接口

项目结构:(保留重要部分)

  .
  |
  ├── com
  │   ├── controller
  |	  |		  └── ...
  │   ├── interceptor
  |   |   	  └── MyInterceptor
  |   User
  |   
  └── webapp
         └── jsp
      		  └── ok.jsp

MyInterceptor类 拦截器

package com.interceptor;

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

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

public class MyInterceptor implements HandlerInterceptor {
    
    /**
     * 执行点:控制器方法执行前
     * 应用场景:登录验证、...
     * @return 是否通行,控制器方法;false:进制通行至控制器
     */
    @Override
    public boolean preHandle(HttpServletRequest request , HttpServletResponse response , Object handler) throws Exception {
        System.out.println("preHandle===============");
        return true;
    }
    
    /**
     * 执行点:在控制器方法执行后,在视图返回前,有机会修改返回值
     * 应用场景:日志、登录ip、时间、...
     */
    @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===============");
    }
}

当请求时 都会执行拦截器

#SpringMVC#Java
上次更新: 2023/03/12, 00:43:49

← SpringMVC 异常 SpringMVC 上传&下载→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式