springmvc 中自定義攔截器
阿新 • • 發佈:2019-02-09
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>