天天看點

spring MVC 中使用Interceptor攔截器

在實際開發中,有許多地方要使用攔截器,比如驗證使用者有沒有登入,或者配置設定權限什麼的。還是非常重要的,正好最近學習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> 
           

當然,這隻是最簡單的攔截器,其他功能可以在此基礎上進行擴充。

繼續閱讀