1. 程式人生 > >【Java】Filter過濾器中,在chain.doFilter(request,response)後若有重定向或轉發語句

【Java】Filter過濾器中,在chain.doFilter(request,response)後若有重定向或轉發語句

在chain.doFilter(request,response)後若有重定向或轉發語句,執行順序是:
1.所要訪問的資源不是轉發的目標資源
chain.doFilter(request,response)–>下一個過濾器(如果有)–>執行完整個 過濾器鏈–>執行重定向或轉發語句–>最後再訪問你所要訪問的資源
2..所要訪問的資源是轉發的目標資源
chain.doFilter(request,response)–>下一個過濾器(如果有)–>執行完整個 過濾器鏈–>最後再訪問你所要訪問的資源

而在1的情況裡,重定向語句會與訪問的資源產生衝突而丟擲異常

程式碼片段

            //獲取session域物件
            HttpSession session = request.getSession(false);
            if(session!=null) {
                //若session物件不為空
                if(session.getAttribute("userInfo")!=null) {
                    //若userInfo不為空
                    //說明已經登入成功,放行
arg2.doFilter(request, response); }else { //否則,跳轉到登入頁面 url="/User/login.jsp"; } }else { //否則,跳轉到登入頁面 url="/User/login.jsp"; } request.getRequestDispatcher(url).forward(request, response);