1. 程式人生 > 其它 >Spring MVC 攔截器 interceptor(實現 HandlerInterceptor 介面)

Spring MVC 攔截器 interceptor(實現 HandlerInterceptor 介面)

技術標籤:Java Spring/springmvc

一、攔截器(interceptor)的作用

SpringMVC的攔截器類似於Servlet 開發中的過濾器 Filter

二、攔截器和過濾器區別

JavaWeb三大元件(Servlet、Filter、Listener)

三、自定義攔截器步驟

1、建立攔截器類,實現 HandlerInterceptor 介面

preHandle : 目標方法執行之前 執行

postHandle : 目標方法執行之後,檢視返回之前 執行

afterCompletion : 流程執行完成後,執行

// 建立攔截器類,實現 HandlerInterceptor 介面
public class MyInterceptor1 implements HandlerInterceptor {
    // 目標方法執行之前 執行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle..");
        String param = request.getParameter("param");
        //http://localhost:8080/target?param=yes
        if("yes".equals(param)){
            return true; //返回true表示放行
        }else{
            //如果不帶引數,param不是yes
            //轉發到 /error.jsp
            request.getRequestDispatcher("/error.jsp").forward(request,response);
            return  false;
        }


    }

    // 目標方法執行之後,檢視返回之前 執行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle..");
        // 對 ModelAndView 進行再加工
        modelAndView.addObject("name","lt22");
    }

    // 流程執行完成後,執行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion..");
        // Exception 進行封裝
    }
}

2、SpringMvc 配置檔案中配置攔截器

    <!--配置攔截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--對那些資源進行攔截操作。 /** 對所有控制器方法-->
            <mvc:mapping path="/**"/>
            <bean class="com.lt.interceptor.MyInterceptor1"/> <!--class="自定義攔截器的全限定名"-->
        </mvc:interceptor>
    </mvc:interceptors>

3、control

@Controller
public class TargetController {
    @RequestMapping("/target")
    public ModelAndView show(){
        System.out.println("目標資源執行...");
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("name","lt");
        modelAndView.setViewName("index");
        return  modelAndView;
    }
}