兩步 配置 Spring mvc 攔截器 interceptor 一攔截器 第一步實現HandlerInterceptor介面 第二步註冊進spring
兩步 配置 Spring mvc 攔截器 interceptor 一.攔截器.
區別於過濾器,攔截器是基於java的反射機制的,而過濾器是JavaEE標準,採用函數回調的方式進行的。詳細區別參見:Java過濾器與SpringMVC攔截器之間的關係與區別
在springMVC中,攔截器(HandlerInterceptor)是一個介面(interface),使用時必須重寫三個方法 :
preHandler():在進入Handler之前執行了,使用於身份認證,身份授權,登陸校正等,比如身份認證,使用者沒有登陸,攔截不再向下執行,傳回值為 false ,即可實現攔截;否則,返回true時,攔截不進行執行; postHandler(): 進入Handler方法之後,返回ModelAndView之前執行,使用情境從ModelAndView參數出發,比如,將公用的模型資料在這裡傳入到視圖,也可以統一指定顯示的視圖等; afterHandler(): 類似finally語句塊或者C++的解構函式,在執行Handler結束後執行,一般用於異常、Tlog等;
引自: http://blog.csdn.net/lablenet/article/details/50483674 第一步:實現HandlerInterceptor介面
例子中,攔截除/login 外的所有請求:
package site.gaoyisheng.filter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import site.gaoyisheng.pojo.User;public class LoginHandlerInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); if (!requestURI.equalsIgnoreCase("/trans/login")) { // 說明處在編輯的頁面 User currentUser = (User) request.getSession().getAttribute("currentUser"); if (currentUser != null) { // 登陸成功的使用者 return true; } else { // 沒有登陸,轉向登陸介面 request.getRequestDispatcher("/login").forward(request, response); return false; } } else return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }}
第二步:註冊進spring
在SpringMVC.xml配置中,註冊攔截器.
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="site.gaoyisheng.filter.LoginHandlerInterceptor"></bean> </mvc:interceptor></mvc:interceptors>
源碼:歡迎交流.
https://github.com/timo1160139211/trans
參考資料:
http://blog.csdn.net/lablenet/article/details/50483674
http://www.imooc.com/learn/498