您好,登錄后才能下訂單哦!
攔截器簡介
Spring MVC 中的攔截器(Interceptor)類似于 Servler 中的過濾器(Filter)。用于對處理器進行預處理和后處理。常用于日志記錄、權限管理、性能監控、通用行為等。
攔截器的實現
Spring MVC 中的攔截器需要我們手動實現和配置。攔截器可以通過以下兩種方式定義
HandleInterceptor 接口
我們主要講解下實現 HandleInterceptor 接口來創建攔截器。HandleInterceptor 接口定義了三個方法,分別為 preHandle() , postHandle() , afterCompletion(),我們需要重寫這三個方法,從而來實現我們定義攔截器的目的。
假設我們現在定義了兩個攔截器,xml 配置文件中配置順序如下內容如下:
<!-- 攔截器1 --> <mvc:interceptor> <!--配置攔截器的作用路徑--> <mvc:mapping path="/**"/> <bean class="com.jojo.test.interceptor.Intercptor1"/> </mvc:interceptor> <!--攔截器2--> <mvc:interceptor> <mvc:mapping path="/hello"/> <bean class="com.jojo.test.interceptor.Interceptor2"/> </mvc:interceptor>
那么這兩個攔截器中的處理方法和請求的處理方法的順序如下圖:
實際應用舉例
實現開發中,我們會要求一些頁面需要登錄后才能訪問。未登錄狀態是無法得到訪問權限的。這一小功能我們可以直接通過安全框架,類似 Spring Security 或者 shiro 來實現,不過我們現在利用 Spring MVC 這一功能來實現一下:
public class LoginInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { User user = (User) httpServletRequest.getSession().getAttribute("user"); if (user == null) { // 用戶未登錄,重定向到登錄頁 httpServletResponse.sendRedirect("/login"); return false; } return true; } public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } } public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { } }
我們還需要在 spring-mvc 中配置攔截器
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/static/**"/> <mvc:exclude-mapping path="/login"/> <bean class="com.jojo.test.interceptor.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors>
相關配置說明:
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。