簡體   English   中英

對JSP文件使用過濾器時出現無限循環

[英]Infinite loop when using filter for jsp files

當我為所有jsp頁面創建過濾器時,瀏覽器進入無限循環,但是當我僅為一頁創建過濾器時,瀏覽器將正確運行!

這是doFilter方法,如果有人發現錯誤plx告訴我...

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    if (debug)  log("AuthenticationFilter:doFilter()");
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    HttpServletResponse httpres = (HttpServletResponse) response;
    HttpServletRequest httpreq = (HttpServletRequest) request;

    if (httpreq.getRequestURI().indexOf("login.jsp") == -1 || httpreq.getRequestURI().indexOf("LoginServlet") == -1) {
   // if(!httpreq.getRequestURL().equals("/OSQS/Login.jsp")){
        HttpSession session = httpreq.getSession();
        String logged = (String) session.getAttribute("login");

        if (logged == null) {
            httpres.sendRedirect("login.jsp");
            return;
        }
    }
    chain.doFilter(request, response);

}

造成此問題的原因是,過濾器的url-pattern顯然過於通用,例如/**.jsp 它將在每個 JSP請求上執行。

在過濾器中,當沒有登錄用戶時,您將重定向到login.jsp 重定向將指示客戶端觸發新的HTTP請求。 當請求URL與其url-pattern匹配時,新的HTTP請求將再次調用過濾器。 因為仍然沒有登錄的用戶,所以它會進入無限重定向循環。

除了確定請求網址(如您所做的那樣)之外,您還可以將受保護的頁面放在更具體的url-pattern ,例如/secured/*/private/*左右,然后將受保護的頁面放在此處,但是登錄頁面沒有。 如果您重定向到登錄頁面,則不會再調用該過濾器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM