1. 程式人生 > >Struts中的攔截器——登入驗證例項

Struts中的攔截器——登入驗證例項

        前段時間在學習SSH網上商城的時候在接近尾聲的地方視訊中對登入的驗證使用了攔截器,看視訊中的實現並沒有特別的複雜感覺攔截器很好用,現在跟著10期的師哥們做專案對登入的驗證也使用了攔截器,所以就進行了如下簡單的學習瞭解,從它是什麼開始學習。

攔截器

對呼叫Action起作用,提供一種機制可以使開發者在一個action執行的前後定義執行的程式碼,也可以是在action執行前阻止其執行。比較長用的攔截器實現的是校驗、登入許可權的驗證等。

攔截器原理

Struts2攔截器的實現原理相對簡單,當請求struts2的action時,Struts 2會查詢配置檔案,並根據其配置例項化相對的攔截器物件,然後串成一個列表,最後一個一個地呼叫列表中的攔截器。Struts2規定使用者自定義攔截器必須實現com.opensymphony.xwork2.interceptor.Interceptor介面。
該介面聲明瞭3個方法:                     void init();                        void destroy();                         String intercept(ActionInvocation invocation) throws Exception;    其中init和destroy方法會在程式開始和結束時各執行一遍,不管使用了該攔截器與否,只要在struts.xml中聲明瞭該Struts2攔截器就會被執行。intercept方法就是攔截的主體了,每次攔截器生效時都會執行其中的邏輯。而struts中又提供了幾個抽象類來簡化這一步驟,是使用模板方法實現的,因為自己對攔截器的瞭解並不深入只是簡單的學習所以沒有過多的研究。下面就是具體的如何使用攔截器,小編是在SSH框架下編碼進行的。

具體使用的過程

      1、寫好一個攔截器

              在這裡我們繼承了Struts提供的抽象類MethodFilterInterceptor,重寫方法在其中寫入我們自己要執行的邏輯如下

<span style="font-size:18px;">public class PrivilegeInterceptor extends MethodFilterInterceptor{
@Override
//執行攔截的方法
protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
// 首先要從session中拿使用者的資訊
AdminUser existAdminUser=(AdminUser)ServletActionContext.getRequest().getSession().getAttribute("existAdminUser");
//判斷是否拿到了資訊
        if(existAdminUser==null){
            //沒有登入
            ActionSupport actionSupport=(ActionSupport) actionInvocation.getAction();//獲得正在執行的action
            actionSupport.addActionError("親,您還沒有登入!沒有許可權訪問!");
            return "loginFail";
        }else {
        //登入了
            return actionInvocation.invoke();//直接放行
        }
    }
}</span>

2、在Struts.xml中進行配置   

程式啟動後讀取配置檔案然後例項化相應的攔截器類PrivilegeInterceptor。

3、在Action處進行配置


再要執行攔截的action後進行配置就可以使用了。

小結

目前對攔截器的學習知識停留在使用的層面上而對器原理的理解也只是在程式的配置檔案中,使用的感覺比較簡單。自己在查閱相關的資料時瞭解到攔截器不僅僅是這樣簡單的分類和使用的方法,它有很多的型別功能也不相同。也有用它和過濾器進行比較的,有個簡單的了有待深入。