在實際開發中,有許多地方要使用攔截器,比如驗證用戶有沒有登錄,或者分配權限什么的。還是非常重要的,正好最近學習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>當然,這只是最簡單的攔截器,其他功能可以在此基礎上進行擴展。
新聞熱點
疑難解答