SpringMVC拦截器

Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。
将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。


自定义拦截器很简单,只有如下三步:

①创建拦截器类实现HandlerInterceptor接口

②目标方法

③配置拦截器


测试的url

http://localhost:8080/eighteen?param=yes


拦截器类

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 {


//    目标方法执行之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
//        从url中获得参数
        String getParam = request.getParameter("param");
        if(getParam.equals("yes")){
            return true;
        }else{
            return false;
        }
    }

//    目标方法执行之后,视图对象返回之前,执行
    @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");
    }
}

配置拦截器

<!--    配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--            对哪些资源进行拦截-->
            <mvc:mapping path="/**"/>
            <bean id="MyInterceptor" class="com.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

目标方法

@RequestMapping("eighteen")
    public ModelAndView test18(){
        System.out.println("目标方法执行");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("name","123");
        modelAndView.setViewName("success");
        return modelAndView;
    }
posted @ 2021-02-17 22:43  西红柿里没有番茄  阅读(37)  评论(0编辑  收藏  举报