1. 程式人生 > >Filter進行登入驗證時迴圈重定向的解決方法

Filter進行登入驗證時迴圈重定向的解決方法

    Filter也稱之為過濾器,它是Servlet2.3以上新增加的一個功能,其技術是非常強大的。通過Filter技術可以對WEB伺服器的檔案進行攔截過濾,從而實現一些特殊的功能。在JSP開發應用中也是必備的技能之一。

    Filter可以改變一個request(請求)和修改一個response(響應)Filter不是一個Servlet,它不能產生一個response,它能夠在一個requestServlet之前預處理request,也可以在離開Servlet時處理response

    Filter我們可以用它用來做登陸驗證,使沒有登入的使用者(即沒有相關許可權)無法訪問某些功能,當用戶訪問這些功能的時候自動跳轉到登陸介面。下面是我在學習的時候遇到的一個迴圈重定向的問題,後來也找到了幾種解決的方式。

    最開始的時候是對所有Servlet和Jsp進行過濾,這也就出現了我遇到的問題。先把最開始的web.xml和Filter寫出來。

    //最初的web.xml

   

    //最初的Filter

  

    然後對其中的一個檢視相關資訊的QueryFilterServlet(沒有登入的使用者無許可權訪問)進行訪問,下面是FireFox的報錯資訊。

    

    //位址列情況  

    

    以下是我想到的3種解決問題的方式:

    1)將重定向改成請求轉發

    

    ***這種方法的缺點是雖然跳轉到了登陸介面,但位址列顯示的依然是QueryFilterServlet而不是login.jsp

    ————————————————————————————————————————————————

下面我將對出現此問題的原因進行分析一下,然後就可以明白為什麼會使用之後的兩種方法:出現此問題的原因主要是當訪問QueryFilterServlet時,因為使用者沒有登陸,所以將跳轉到login.jsp,但是在Filter同樣對login.jsp進行了過濾,所以當瀏覽器跳轉到login.jsp時,經驗證還是沒有登入,那麼會接著進行跳轉,然後就報錯了。

2)當瀏覽器跳轉到以login.jsp或FilterLoginServlet結尾時直接進行下一步,而不再進行過濾驗證

       


        ***當瀏覽器跳轉到以login.jsp或FilterLoginServlet結尾時表明是跳轉到了登入介面(FilterLoginServlet是對登入資訊驗證的Servlet,所以此時沒有必要再進行過濾

3)修改web.xml

     

***這種方法的缺點是隻對src檔案下的所有Servlet進行過濾,而不對Jsp檔案進行過濾,所以我們需要對Jsp檔案進行單獨的登入驗證。