springmvc自定義的攔截器以及攔截器的配置


一、自定義攔截器

Spring MVC也可以使用攔截器對請求進行攔截處理,用戶可以自定義攔截器來實現特定的功能,自定義的攔截器必須實現HandlerInterceptor接口。

二、HandlerInterceptor接口的三個方法

1.preHandler():

此方法在業務處理器(Controller)處理請求之前被調用。在此方法中可以對用戶請求request進行處理。

若返回值為true,則繼續調用后續的攔截器和目標方法。若返回值為false,則不會再調用后續的攔截器和目標方法。

* 常用來做權限。日志,事務等。

2.postHandler():

此方法在業務處理器處理完請求后,在DispatcherServlet向客戶端返回響應前(調用目標方法之后,渲染視圖之前)被調用,在該方法中對用戶請求request進行處理。

* 常用來對請求域中的屬性或視圖做出修改。

3.afterCompletion():

此方法在DispatcherServlet完全處理完請求后被調用

* 常用來做資源釋放

 三、攔截器和過濾器在執行先后順序圖:

 

 

四、攔截器使用舉例

用戶登錄狀態檢查例子:通過用戶發送的請求,判斷用戶是否登錄,若未登錄則不允許訪問被保護資源

步驟:

1.創建攔截器類

一般攔截器類直接實現HandlerInterceptor接口,重寫HandlerInterceptor接口的三個方法就可以了,

但由於此處只需要用到 HandlerInterceptor接口的preHandler()方法,所以我們可以選擇繼承HandlerInterceptor接口的抽象實現類HandlerInterceptorAdapter,重寫其中的preHandler()方法。

在preHandler()方法中我們只需要從session中查詢用戶信息是否為null,就可以知道用戶是否已登錄了。

public class LoginInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Admin admin = (Admin) session.getAttribute("loginAdmin");
        if (admin == null){
            throw new AccessForbiddenException("請登錄后再訪問!");
        }
        return true;
    }
}

2.注冊攔截器

在web.xml中注冊攔截器,配置需要攔截和不需要攔截的請求

<!--注冊攔截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--mvc:mapping配置要攔截的資源-->
            <!-- /* 對應一層路徑,比如:/aaa -->
            <!-- /** 對應多層路徑,比如:/aaa/bbb 或 /aaa/bbb/ccc 或 /aaa/bbb/ccc/ddd-->
            <mvc:mapping path="/**"/>
            <!--mvc:exclude- mapping配置不攔截的資源-->
            <!--去登陸頁面,不攔截-->
            <mvc:exclude-mapping path="/admin/to/login/page.html"/>
            <!--執行登陸操作,不攔截-->
            <mvc:exclude-mapping path="/admin/do/login.html"/>
            <!--執行退出登錄操作,不攔截-->
            <mvc:exclude-mapping path="/admin/do/Logout.html"/>
            <bean id="loginInterceptor" class="com.atguigu.crowd.mvc.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM