2016-07-18 8 views
0

サーブレットとフィルタが初めてです。私は自分のアプリケーションにログインしていないすべてのユーザーをブロックしようとしています。サーブレット/フィルタでページが正しくリダイレ​​クトされない

web.xmlファイル

<filter> 
     <filter-name>UserFilter</filter-name> 
     <filter-class>user.UserFilter</filter-class> 

    <init-param> 
     <param-name>avoid-urls</param-name> 
     <param-value>index.jsp, SelectDb.jsp, login.jsp</param-value> 
    </init-param> 

    </filter> 
    <filter-mapping> 
    <filter-name>UserFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

フィルタクラス

package user; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.StringTokenizer; 
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; 


public class UserFilter implements Filter { 

    private ArrayList<String> urlList; 

    public UserFilter() { 
    } 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, 
      FilterChain chain) 
      throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 

     String url = request.getServletPath(); 
     String contextPath = request.getContextPath(); 
     boolean allowedRequest = false; 

     for (String urlList1 : urlList) { 
      if (url.contains(urlList1)) { 
       allowedRequest = true; 
       break; 
      } 
     } 
     if (!allowedRequest) { 
      HttpSession session = request.getSession(); 
      if (null == session) { 
       response.sendRedirect(""); 
      } else { 
       String logged = (String) session.getAttribute("username"); 
       if (logged == null) { 
        response.sendRedirect(request.getContextPath() + "/dashboard/SelectDb.jsp"); 
       } else { 
        chain.doFilter(request, response); 
       } 
      } 
     } else { 
      chain.doFilter(request, response); 
     } 

    } 

    @Override 
    public void destroy() { 
    } 

    @Override 
    public void init(FilterConfig config) { 
     String urls = config.getInitParameter("avoid-urls"); 
     StringTokenizer token = new StringTokenizer(urls, ","); 
     urlList = new ArrayList<>(); 
     while (token.hasMoreTokens()) { 
      urlList.add(token.nextToken()); 
     } 
    } 

} 

私はページが私はリダイレクトするページに適切にリダイレクトされていることがわかります。 URLが変更されています。しかし、Firefoxは、ページが適切にリダイレクトされていないと言います。メッセージは、これとやや違います:Firefox has detected that the server is redirecting the request for this address in a way that will never complete. This problem can sometimes be caused by disabling or refusing to accept cookies。私はこのエラーはブラウザ自体からではないと思う。私は他のブラウザも試したので。なぜこのエラー?このエラーをどのように解決できますか?

答えて

0

セッションがまだ存在しない場合にはnullを返すことはありませんので、

HttpSession session = request.getSession(false); 

request.getSession()は、新しいセッションを作成します

HttpSession session = request.getSession(); 

に交換してみてください、ため、ユーザはselectDbのURLにリダイレクトされます彼は !allowedRequestとその無限のリダイレクトを持っています

関連する問題