1. 程式人生 > >springmvc 中自定義攔截器

springmvc 中自定義攔截器

1、自定義攔截器,實現HandlerIterceptor介面

package cn.zzsxt.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import
cn.zzsxt.entity.Userinfo; /** * 使用者登陸的訪問許可權控制 * @author Think * */ public class LoginIntercetor implements HandlerInterceptor { /** * 在控制器方法呼叫前執行 * 返回值為是否中斷 * true,表示繼續執行(下一個攔截器或處理器) * false則會中斷後續的所有操作,所以我們需要使用response來繼續響應後續請求 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws
Exception { System.out.println("LoginInterceptor...preHandle"); //獲取session HttpSession session = request.getSession(); Userinfo user = (Userinfo)session.getAttribute("loginUser"); if(user!=null){ //登陸使用者 return true; }else{ String path=request.getServletContext().getContextPath(); System.out.println("path="
+path); response.sendRedirect(path+"/login.jsp"); return false; } } /** * 在控制器方法呼叫後,解析檢視前呼叫,我們可以對檢視和模型做進一步渲染或修改 * 可在modelAndView中加入資料,比如當前時間 */ @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { } /** * 整個請求完成,即檢視渲染結束後呼叫,這個時候可以做些資源清理工作,或日誌記錄 */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { } }

2、配置springmvc.xml

<!--配置攔截器, 多個攔截器,順序執行 -->
<mvc:interceptors>
    <!-- 匹配的是url路徑, 如果不配置或/**,將攔截所有的Controller -->
       <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/user/login"/>
            <bean class="cn.zzsxt.interceptor.LoginIntercetor"></bean>
        </mvc:interceptor>
    <!-- 當設定多個攔截器時,先按順序呼叫preHandle方法,然後逆序呼叫每個攔截器的postHandle和afterCompletion方法 -->
</mvc:interceptors>