Spring框架——攔截器(SpringMVC)
阿新 • • 發佈:2020-08-28
攔截器
介紹
Spring的Handler對映機制包含了Handler攔截器
使用handler攔截器,可以在某些
- 請求應用特殊的功能
- 檢查許可權
- 防止表單重複提交
必須實現HandlerInterceptor
介面
xml檔案配置
攔截器的配置
<!-- 基於註解驅動的SpringMVC --> <mvc:annotation-driven /> <mvc:interceptors> <mvc:interceptor> <!-- 過濾所有的Controller --> <mvc:mapping path="/**"/> <!-- 不過濾的Controller --> <mvc:exclude-mapping path="/user/login"/> <bean class="com.myschool.user.LoginTimeInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
Java檔案
- 繼承
HandlerInterceptorAdapter
- 重寫方法
preHandler
- 重寫方法
postHandler
- 重寫方法
afterCompletion(..)
public class LoginTimeInterceptor extends HandlerInterceptorAdapter { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion"); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle"); Calendar cal = Calendar.getInstance(); int hour = cal.get(Calendar.HOUR_OF_DAY); if (8 <= hour && hour < 17) { return true; }else{ response.sendRedirect("index.jsp"); return false; } // return true; } }
-
preHandler 在handler執行前呼叫
-
postHandler 在handler執行後呼叫
-
afterCompletion(..) 在整個請求完成後呼叫
Controller檔案
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/login") public void login(){ } @RequestMapping("/list") public void list(){ System.out.println("list"); } }