2013-07-10 29 views
0

此Java Web應用程序運行時會顯示爲無限循環。誰能告訴我原因?需要過濾每一個請求here.allowed可以使用system.other用戶應該去登錄頁面的消息。請幫助我這樣做。運行程序時發生無限循環

FilterRequest.java

package com.mobitel.bankdemo.web; 

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import com.mobitel.bankdemo.domain.User; 

public class FilterRequest implements Filter{ 
    FilterConfig filterConfig = null; 

    public FilterRequest() { 
     super(); 
    } 

    public void init(FilterConfig filterConfig) throws ServletException { 
     this.filterConfig = filterConfig; 
    } 

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) resp; 
     System.out.println("Inside the filter.............." ); 
      HttpSession session = request.getSession(true); 
      User u = null; 
      if(session.getAttribute("loggedUser")!=null){ 
       u = (User) session.getAttribute("loggedUser"); 
      }  
      if (u!= null) 
      { 
       System.out.println("user does exits.." + u.getUname()); 
       chain.doFilter(req, resp); 

      }else{ 
       String message = "Please Login!";    
       req.setAttribute("loginMsg", message); 
       response.sendRedirect("login2.jsp"); 
      } 
    } 
    public void destroy() { 
     // do cleanup stuff 
    } 
} 

web.xml中過濾器映射

<filter> 
     <filter-name>FilterRequest</filter-name> 
     <filter-class>com.mobitel.bankdemo.web.FilterRequest</filter-class>     
    </filter> 
    <filter-mapping> 
     <filter-name>FilterRequest</filter-name> 
     <url-pattern>*.jsp</url-pattern> 
    </filter-mapping> 

預先感謝您

+0

可能重複(http://stackoverflow.com/questions/13114743/java-filter-infinite-loop) – NINCOMPOOP

+0

可以請你發佈細節包括你已經放置的系統日誌,並在login2.jsp – Abhilash

回答

0

我不是Java專家,但只是看在你的代碼,我只想說一句兩件事

(1)考慮過濾器是否從這裏的請求獲取用戶名

if(session.getAttribute("loggedUser")!=null){ 
       u = (User) session.getAttribute("loggedUser"); 
      }  
      if (u!= null) 
      { 
       System.out.println("user does exits.." + u.getUname()); 
       chain.doFilter(req, resp); 

它會再次進入子程序或方法來過濾其他東西,但進入這個方法,你在做user=null,並且由於這一點,將再次進入相同的,如果我們之前

整理出來之後,是

   if (u!= null) 
       { 
        System.out.println("user does exits.." + u.getUname()); 
        chain.doFilter(req, resp); 

因此定義User u = null在您的方法之外。可能會解決問題烏爾

+0

給出的行動沒有工作:( – user1758876

0
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { 
      HttpServletRequest request = (HttpServletRequest) req; 
      HttpServletResponse response = (HttpServletResponse) resp; 
      System.out.println("Inside the filter.............." ); 
    String loginUrl= request.getContextPath() + "/login2.jsp";//url for login page 
     String uri = request.getRequestURI().toString(); 
     if (uri.endsWith(loginUrl)){// if uri is login page then no need to check if login, just process the chain 
      chain.doFilter(); 
     } 
      else{ HttpSession session = request.getSession(true); 
       User u = null; 
       if(session.getAttribute("loggedUser")!=null){ 
        u = (User) session.getAttribute("loggedUser"); 
       }  
       if (u!= null) 
       { 
        System.out.println("user does exits.." + u.getUname()); 
        chain.doFilter(req, resp); 

       }else{ 
        String message = "Please Login!";    
        req.setAttribute("loginMsg", message); 
        response.sendRedirect("login2.jsp"); 
        return; 
       } 
    } 
     } 
[Java過濾無限循環]的
+0

我刪除了response.sendRedirect(「login2.jsp」);線但同樣的事情發生。:( – user1758876