1. 程式人生 > 實用技巧 >springMVC攔截器使用

springMVC攔截器使用

新建一個類,實現

HandlerInterceptor 介面

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 {
    
/*preHandler方法會[早於]控制器中的方法先執行 如果該方法返回false,則不執行控制器的方法(相當於之前沒有執行放行程式碼) 返回true,則繼續執行控制器的方法 * */ @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws
Exception { System.out.println("MyInterceptor的preHandler方法被執行了"); return true; } /* * postHandle方法[晚於]控制器方法執行-1 * 控制器方法執行完,在準備跳轉頁面之前,先執行該方法,此時ModelAndView中儲存著控制器要跳轉的頁面路徑和 * 儲存作用域資料*/ @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView)
throws Exception { System.out.println("MyInterceptor的postHandle方法被執行了"); } /*afterCompletion * 方法[晚於]控制器方法執行-2 * 等頁面跳轉渲染了才會執行*/ @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("MyInterceptor的afterCompletion方法執行了"); } }

在mvc.xml配置控制器

<!--攔截器相關配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--指定要攔截器的請求路徑
            /* 只能攔截器http://ip地址:8081/專案名/test3.do請求
            /** 攔截所有請求
            -->
            <mvc:mapping path="/**"/>
            <!--exclude(排除)排除一些不攔截的請求路徑
             <mvc:mapping path=""/>
            -->
           <!--攔截器的全類名-->
            <bean class="com.test.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>