在實際開發中,有許多地方要使用攔截器,比如驗證使用者有沒有登入,或者配置設定權限什麼的。還是非常重要的,正好最近學習Interceptor 攔截器,特記錄一下。使用攔截器很簡單,在springMVC中,定義自己的攔截器是通過繼承HandlerInterceptorAdapter 類或者通過實作HandlerInterceptor 接口。
寫一個攔截器,用于判斷使用者是否登入過,如果登入過,就可以通路首頁或其他頁面,如果沒有進行登入過,就跳轉到登入界面。
public class MyInterceptor implements HandlerInterceptor {
/*afterCompletion也是需要目前對應的Interceptor的preHandle方法的傳回值為true時才會執行。該方法将在整個請求完成之後,也就是DispatcherServlet渲染了視圖執行。*/
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
}
/*postHandle隻會在目前這個Interceptor的preHandle方法傳回值為true的時候才會執行。postHandle是進行處理器攔截用的,它的執行時間是在處理器進行處理之後,也就是在Controller的方法調用之後執行,但是它會在DispatcherServlet進行視圖的渲染之前執行,也就是說在這個方法中你可以對ModelAndView進行操作。*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
}
// preHandle方法是進行處理器攔截用的,該方法将在Controller處理之前進行調用
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object obj) throws Exception {
HttpSession session = req.getSession();
User user = (User) session.getAttribute("user");
if(null != user){
return true;
}
req.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(req, resp);
return false;
}
}
在springMVC配置檔案中配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.test.filter.MyInterceptor "></bean>
</mvc:interceptor>
</mvc:interceptors>
當然,這隻是最簡單的攔截器,其他功能可以在此基礎上進行擴充。