之前在學習servlet和jsp時學習了過濾器Filter,使用過濾器需要實現Filter介面,它能夠在請求到servlet之前攔截請求,並且根據需求對請求進行相應的處理。 攔截器跟過濾器非常相似,SpringMVC攔截器是通過實現HandlerInterceptor介面實現的,它其實是AOP的一種 ...
之前在學習servlet和jsp時學習了過濾器Filter,使用過濾器需要實現Filter介面,它能夠在請求到servlet之前攔截請求,並且根據需求對請求進行相應的處理。
攔截器跟過濾器非常相似,SpringMVC攔截器是通過實現HandlerInterceptor介面實現的,它其實是AOP的一種應用。
這個介面與三個方法,我們來看一下源碼:
public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } }
preHandle是在Handler執行之前執行;
postHandle是在Handler執行成功之後執行;
afterCompletion是在請求處理完畢後執行。
下麵我們來具體實現一下:
實現介面:
public class UserInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); if (session.getAttribute("UserName") != null) { return true; } response.sendRedirect("/tlp"); return false; } @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 { } }
return true是給其他攔截器放行。
在Spring配置文件中配置攔截器:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/user/**"/> <bean class="com.jms.config.UserInterceptor"/> </mvc:interceptor> </mvc:interceptors>
這裡是對/user下麵的所有請求進行攔截。
(本文僅作個人學習記錄用,如有紕漏敬請指正)