多学习。

SpringMVC拦截器

分析


实现

1.后端controller

package com.czy.controller;

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

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/testInterceptor")
    public String testInterceptor(){
        System.out.println("testInterceptor执行了...");
        return "success";
    }
}

2.编写拦截器类(实现HandlerInterceptor接口)

拦截器1

package com.czy.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 MyInterceptor1 implements HandlerInterceptor {

    /**
     * 预处理,controller方法执行前
     * return true 放行,执行下一个拦截器,如果没有,执行controller中的方法
     * return false 不放行,无法执行controller
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行了...前111");
        /*request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);*/
        return true;
    }

    /**
     * 后处理的方法,controller方法执行后,success.jsp执行前
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器执行了...后111");
        //跳转后success.jsp页面与afterCompletion也会执行,但我们只会看到跳转页面
        /*出错了也可进行页面跳转:request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);*/
    }

    /**
     * success.jsp执行后,该方法会执行,此方法不能跳转页面
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器执行了...最后111");
    }
}

拦截器2

package com.czy.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 MyInterceptor2 implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行了...前222");
        return true;
    }


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器执行了...后222");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器执行了...最后222");
    }
}

3.配置拦截器

  <!--配置拦截器-->
    <mvc:interceptors>
        <!--配置多个拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/user/*"/> <!--拦截的具体方法-->
            <!--<mvc:exclude-mapping path=""/>--> <!--不拦截的方法-->
            <bean class="com.czy.interceptor.MyInterceptor1"></bean> <!--配置拦截器对象-->
        </mvc:interceptor>
        
        <!--配置第二个拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.czy.interceptor.MyInterceptor2"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

结果

posted @   czyaaa  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示