Spring MVC中的拦截器案例演示

 更新时间:2023年10月16日 15:54:04   作者:啊Q老师  
拦截器可以拦截所有的请求,也可以只拦截满足指定的请求, Spring MVC 的拦截器类似于过滤器,用来执行预处理和后处理操作,本文给大家介绍Spring MVC中的拦截器案例演示,感兴趣的朋友跟随小编一起看看吧

前言

在 JavaWeb 中,过滤器是 Servlet 技术中最实用的技术,能够管理 Web 服务器的所有 Web 资源,实现信息拦截、权限访问控制、过滤敏感词汇、压缩响应信息等功能。它主要用于对用户请求进行预处理,也可以对 HttpServletResponse 进行后处理。

而 Spring MVC 的拦截器类似于过滤器,用来执行预处理和后处理操作。但拦截器是基于 Java 的反射机制(动态代理)实现的,是一个 Spring 组件,由 Spring 容器管理,可以单独使用,并且可以获取 IoC 容器中的 bean 。

拦截器

拦截器可以拦截所有的请求,也可以只拦截满足指定的请求。拦截器一般用来实现以下功能:

  • 登录验证:在用户访问需要登录的页面之前,拦截器可以检查用户是否已经登录,如果没有登录则重定向到登录页面
  • 权限检查:在用户访问需要特定权限的页面之前,拦截器可以检查用户是否具有相应的权限,如果没有则返回无权限的错误信息
  • 日志记录:在用户访问每个页面时,拦截器可以记录日志,包括请求的 IP 地址、请求时间、请求的 URL 等信息
  • 数据校验:在请求处理之前,拦截器可以校验请求参数的有效性,如果参数不合法则返回错误信息
  • 统一异常处理:在请求处理出现异常时,拦截器可以统一处理异常信息,避免程序抛出异常页面

简单示例:
首先,创建一个实现 org.springframework.web.servlet.HandlerInterceptor 接口的类

package cn.edu.springmvcdemo.controller;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HandlerInterceptorDemo implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 执行预处理操作
        System.out.println("Pre-handle");
        return true; // 返回 true 表示继续处理请求,返回 false 则中断请求
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 执行后处理操作
        System.out.println("Post-handle");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 执行清理操作
        System.out.println("After completion");
    }
}

接着,在 springmvc.xml 配置文件中配置拦截器

<!-- 配置拦截器 -->
<mvc:interceptors>
	<!-- 拦截器会拦截所有请求 -->
    <bean class="cn.edu.springmvcdemo.controller.HandlerInterceptorDemo" />
</mvc:interceptors>

最后,测试结果,输入 fileupload

结果如图:

注:配置拦截器的其他方式

1.只拦截指定路径的请求

<!-- 配置拦截器 -->
<mvc:interceptors>
    <!-- 1.只拦截指定路径的请求 -->
    <mvc:interceptor>
        <mvc:mapping path="/fileupload" />
        <bean class="cn.edu.springmvcdemo.controller.HandlerInterceptorDemo" />
    </mvc:interceptor>
</mvc:interceptors>

2.排除拦截指定路径的请求

<!-- 配置拦截器 -->
<mvc:interceptors>
    <!-- 2.排除拦截指定路径的请求 -->
    <mvc:interceptor>
        <!-- 拦截所有请求,必须在排除拦截的上面 -->
        <mvc:mapping path="/*" />
        <!-- 排除拦截指定路径的请求 -->
        <mvc:exclude-mapping path="/fileupload" />
        <bean class="cn.edu.springmvcdemo.controller.HandlerInterceptorDemo" />
    </mvc:interceptor>
</mvc:interceptors>

附:异常处理

异常处理,指当 Spring MVC 在处理请求过程中出现异常时,通过异常处理器进行处理。异常处理器可以捕获并处理异常,使得程序能够正常运行。

简单示例:
首先,在 springmvc.xml 配置文件中配置异常处理器

<!-- 配置全局异常处理器 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >
    <!-- 默认异常信息引用名为 exception ,可以修改但要与 error 页面中 ${name} 保持一致 -->
    <property name="exceptionAttribute" value="exception" />
    <property name="exceptionMappings" >
        <props>
            <!-- 跳转到错误页面的名字 -->
            <prop key="java.lang.RuntimeException" >error</prop>
        </props>
    </property>
</bean>

接着,创建一个全局异常处理的页面 error.jsp

<%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2023/8/9
  Time: 22:12
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    <h3>处理请求过程中出现异常......</h3>
    错误为:${exception}
</body>
</html>

然后,在 controller 类简单写个处理方法

package cn.edu.springmvcdemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class ErrorDemo {
    @RequestMapping("/errorTest")
    public String errorTest(@RequestParam("i") int i){
        System.out.println(89/i);
        return "accessing";
    }
}

最后,测试结果
输入 errorTest?i=0(分母不能为零),结果如图:

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

相关文章

  • java为什么需要虚拟机jvm原理详解

    java为什么需要虚拟机jvm原理详解

    这篇文章主要为大家介绍了java为什么需要虚拟机jvm的原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • SpringCloud Nacos服务分级存储模型详解

    SpringCloud Nacos服务分级存储模型详解

    Nacos服务分级存储模型是Nacos存储服务注册信息和配置信息的核心模型之一,本文将对 Nacos 服务分级存储模型进行深入解析,感兴趣的朋友一起看看吧
    2024-02-02
  • 解决eclipse上传svn忽略target文件夹的坑

    解决eclipse上传svn忽略target文件夹的坑

    这篇文章主要介绍了解决eclipse上传svn忽略target文件夹的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 详解SpringMVC——接收请求参数和页面传参

    详解SpringMVC——接收请求参数和页面传参

    这篇文章主要介绍了详解SpringMVC——接收请求参数和页面传参,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
    2016-12-12
  • java创建简易视频播放器

    java创建简易视频播放器

    这篇文章主要为大家详细介绍了java创建简易视频播放器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • springboot 项目容器启动后如何自动执行指定方法

    springboot 项目容器启动后如何自动执行指定方法

    这篇文章主要介绍了springboot 项目容器启动后如何自动执行指定方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 详解springboot项目带Tomcat和不带Tomcat的两种打包方式

    详解springboot项目带Tomcat和不带Tomcat的两种打包方式

    这篇文章主要介绍了详解springboot项目带Tomcat和不带Tomcat的两种打包方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • BaseDao封装增删改查的代码详解

    BaseDao封装增删改查的代码详解

    本篇文章主要介绍对数据库中表中的数据进行增改删查询,封装一个工具类(BaseDao)的详细使用以及部分理论知识,并通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Java 实战范例之员工管理系统的实现

    Java 实战范例之员工管理系统的实现

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+vue+Springboot+ssm+mysql+maven+redis实现一个前后端分离的员工管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Java中的static静态代码块的使用详解

    Java中的static静态代码块的使用详解

    本篇文章介绍了,Java中的static静态代码块的使用详解。需要的朋友参考下
    2013-04-04

最新评论