在Spring MVC中配置自定义拦截器的确切方法。。

自定义拦截器

  • 什么是拦截器

1、在Spring MVC中可以使用拦截器对方法请求进行拦截处理,各位程序员可以自定义拦截器来实现特定的功能。

2、拦截器必须实现 HandlerInterceptor 接口。

  • 自定义拦截器的三个方法

1、preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求的 request

进行处理。

2、postHandle():这个方法在目标方法处理完请求后执行。

3、afterCompIetion():这个方法在完全处理完请求后被调用,可以在该方法中进行一些资源的释放/清理等操作。

自定义拦截器执行流程分析图

  • 自定义拦截器执行流程说明

1、如果 preHandle 方法 返回 false ,则就不在执行目标方法,可以在此之地那个返回页面。

2、postHandle 在目标方法被执行后执行,可以在方法中访问到目标方法返回的 ModelAndView 对象。

3、若 preHandle 返回 true,则 afterCompIetion 方法 在渲染视图之后被执行。

4、若 preHandle 返回 false,则 afterCompIetion 方法 不会被调用。

5、在配置拦截器时,可以指定该拦截器对哪些请求生效,哪些请求不生效。

自定义拦截器应用实例

例:如何配置拦截器以及拦截器的运行流程

  • 实例代码

这里让类 实现 HandlerInterceptor 接口,来获取 HandlerInterceptor() 中的三个执行方法。

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交给Spring MVC进行管理
@Component
public class MyInterceptor01 implements HandlerInterceptor {
    /**
     *1.preHandle() 在目标方法执行前被执行
     * 2.如果preHandle() 返回false,不在执行目标方法
     * 3.该方法可以获取到request,response,handler
     * 4.这里根据业务,可以进行拦截,并指定需要跳转到哪个页面
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("--MyInterceptor01--preHandle()----");
        return true;
    }

    /**
     * 解读:
     * 1.在目标方法执行后,会执行 postHandle()
     * 2.该方法可以获取到 目标方法,返回modelAndView
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("--MyInterceptor01--postHandle()");
    }

    /**
     * 解读:
     * 1.afterCompletion() 在视图从渲染后被执行
     * 2.可以执行资源处理
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("--MyInterceptor01--afterCompletion()");
    }
}

接下来我们配置需要执行的目标方法。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class FurnHandler {
    @RequestMapping(value = "/hi")
    public String hi(){
        System.out.println("--FurnHandler--hi()");
        return "success";
    }

    @RequestMapping(value = "/hello")
    public String hello(){
        System.out.println("--FurnHandler--hello()");
        return "success";
    }
}

随后我们需要在Spring的 .xml 配置文件中配置拦截器

<!--配置自定义拦截器-->
    <mvc:interceptors>
        <!--解读:
        1.第一种配置方式
        2.ref 引用到对应的MyInterceptor01
        3.这种方式,会拦截目标方法
        -->
        <ref bean="myInterceptor01"/>
    </mvc:interceptors>

还有两种其余的方法!!!

<!--配置自定义拦截器-->
    <mvc:interceptors>
        <!--解读:
        默认配置是都所有的目标方法都进行拦截, 也可以指定拦截目标方法, 比如只是拦截 hi
        1.第二种配置方式
        2.<mvc:mapping path="/hi"/> 指定要拦截的路径
        3.<ref bean="myInterceptor01"/> 指定对那个拦截器进行配置
        -->
        <!--<mvc:interceptor>-->
        <!--    <mvc:mapping path="/hi"/>-->
        <!--    <ref bean="myInterceptor01"/>-->
        <!--</mvc:interceptor>-->

        <!--
        mvc:mapping 支持通配符, 同时指定不对哪些目标方法进行拦截
        解读:
        1.第三种配置方式
        2.<mvc:mapping path="/h*"/> 通配符方式 拦截‘h’打头的文件
        3.<mvc:exclude-mapping path="/hello"/> 指定‘/hello’不拦截
        4.<ref bean="myInterceptor01"/> 指定对那个拦截器进行拦截
        -->
        <mvc:interceptor>
            <mvc:mapping path="/h*"/>
            <mvc:exclude-mapping path="/hello"/>
            <ref bean="myInterceptor01"/>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/h*"/>
            <ref bean="myInterceptor02"/>
        </mvc:interceptor>
    </mvc:interceptors>

最后完成对客户端页面的请求。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试自定义拦截器</title>
</head>
<body>
<h1>测试自定义拦截器</h1>
<a href="<%=request.getContextPath()%>/hi">拦截--hi</a><br/>
<a href="<%=request.getContextPath()%>/hello">拦截--hello</a>
</body>
</html>

学习 Java 的小伙伴也可以用 Postman的方式进行测试,对后端小伙伴也会有很大的帮助的,下一期再见。。。

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring MVC拦截器配置Spring的其他组件配置略有不同,这是因为Spring MVC框架有其特定的请求生命周期和处理流程。 在Spring MVC拦截器是一种用于在处理请求之前、之后或之间执行预处理和后处理逻辑的组件。它可以用于实现身份验证、日志记录、性能监控等功能。拦截器可以应用于整个应用程序或特定的请求处理器。 拦截器配置Spring MVC通常是通过实现HandlerInterceptor接口来定义自定义拦截器,并通过WebMvcConfigurer接口的addInterceptors方法将其注册到Spring MVC配置。 具体配置步骤如下: 1. 创建一个类实现HandlerInterceptor接口,实现preHandle、postHandle和afterCompletion方法,分别用于定义拦截器的前置处理、后置处理和完成处理逻辑。 2. 创建一个类实现WebMvcConfigurer接口,重写addInterceptors方法。 3. 在addInterceptors方法,通过InterceptorRegistry对象的addInterceptor方法自定义拦截器添加拦截器,并可以通过addPathPatterns和excludePathPatterns方法指定拦截器的匹配路径和排除路径。 4. 将自定义的WebMvcConfigurer实例注册到Spring MVC配置。 相比于Spring其他组件的配置Spring MVC拦截器配置需要遵循特定的接口和方法来定义和注册拦截器,这是因为Spring MVC框架需要在请求处理的不同阶段调用拦截器的相应方法,以实现请求的拦截和处理。这样的设计使得拦截器能够与Spring MVC框架紧密集成,并在请求处理过程起到特定的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻鱼辣椒️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值