Spring MVC拦截器

bean-cfg.xml文件自定义自己的拦截器

    <mvc:interceptors>
        <!--配置自定义的拦截器-->
        <bean class="com.study.interceptors.firstInterceptor"/>
    </mvc:interceptors>

com.study.interceptors.firstInterceptor.java文件

package com.study.interceptors;

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

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

public class firstInterceptor implements HandlerInterceptor {
    /**
     * 在目标方法之前调用。
     * 若返回值为true,则继续调用后续的拦截器和目标方法
     * 若返回false,则不会再调用后续的拦截器和目标方法
     * 该方法可以考虑做权限验证,日志,事务等
     *
     * @param request  请求
     * @param response 响应
     * @param handler  视图名称或视图对象或属性
     * @return {boolean}
     * @throws Exception {String}
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("[FirstInterceptor]=>preHandle");
        return true;
    }

    /**
     * 调用目标方法之后,但渲染视图之前被调用
     * 该方法可以对请求域中的属性或视图做修改
     *
     * @param request      请求
     * @param response     响应
     * @param handler      自定义对象
     * @param modelAndView 含视图名称或视图对象或属性
     * @throws Exception {String}
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("[FirstInterceptor]=>postHandle");
    }

    /**
     * 渲染视图之后被调用,释放资源
     *
     * @param request  请求
     * @param response 响应
     * @param handler  自定义对象
     * @param ex       {string}
     * @throws Exception {string}
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("[FirstInterceptor]=>afterCompletion");
    }
}

拦截器执行流程

preHandle → handle → postHandle → 视图(DispatcherServlet) → afterCompletion

配置指定域拦截器

<!--配置LocalChanceInterceptor拦截器-->
    <mvc:interceptors>
        <!--配置指定域拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/path/"/>
            <bean class="com.study.interceptors.firstInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

配置多个拦截器

<!--配置LocalChanceInterceptor拦截器-->
    <mvc:interceptors>
        <bean class="com.study.interceptors.FirstInterceptor"/>
        <!--配置指定域拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/path/"/>
            <bean class="com.study.interceptors.LastInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

拦截器执行流程

[FirstInterceptor]:preHandle[LastInterceptor]:preHandleHandlerAdapter:handle[LastInterceptor]:postHadnle[FirstInterceptor]:postHadnleDispatcherServlet:render[LastInterceptor]:afterCompletion[FirstInterceptor]:afterCompletion
posted @   MineLSG  阅读(81)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示