2015-07-14 2 views
0

Я новичок в java. Я пытаюсь использовать фильтры сервлета для проверки сессии. Мой код приведен ниже. но во время работы я получил ошибку. пожалуйста, помогите исправить ошибку. код ошибкиКак мы можем использовать сервлет-фильтр для sessioncheck?

HTTP Status 500 - Cannot forward after response has been committed 
type Exception report 

message Cannot forward after response has been committed 

description The server encountered an internal error that prevented it from fulfilling this request. 

И мой код

мой web.xml

<servlet> 
      <servlet-name>login</servlet-name> 
      <servlet-class>com.sample.wordnik.servlet.LoginServlet</servlet-class> 
     </servlet> 
     <welcome-file-list> 
      <welcome-file>index.html</welcome-file> 
     </welcome-file-list> 
     <servlet-mapping> 
     <servlet-name>login</servlet-name> 
     <url-pattern>/login</url-pattern> 
    </servlet-mapping> 
<filter> 
     <filter-name>SessionFilter</filter-name> 
     <filter-class> 
      com.sample.wordnik.filter.SessionFilter 
     </filter-class> 
     <init-param> 
      <param-name>avoid-urls</param-name> 
      <param-value>login.jsp,signup.jsp</param-value> 

     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>SessionFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

мой класс фильтр

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 SessionFilter implements Filter { 

    private ArrayList<String> urlList; 

    @Override 
    public void destroy() { 
    } 

    @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(); 
     boolean allowedRequest = false; 

     if(urlList.contains(url)) { 
      allowedRequest = true; 
     } 

     if (!allowedRequest) { 
      HttpSession session = request.getSession(false); 
      if (null == session) { 
       response.sendRedirect("login"); 
      } 
     } 

     chain.doFilter(req, res); 
    } 

    @Override 
    public void init(FilterConfig config) throws ServletException { 
     String urls = config.getInitParameter("avoid-urls"); 
     StringTokenizer token = new StringTokenizer(urls, ","); 

       urlList = new ArrayList<String>(); 


     while (token.hasMoreTokens()) { 
      urlList.add(token.nextToken()); 

     } 
    } 
} 

И мой LoginServlet является

public class LoginServlet extends HttpServlet { 

    @Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); 
} 
} 
+0

@Balusc, который не был ответ на этот вопрос. просто запишите этот вопрос и ответьте на него –

ответ

1

Проблема: вы уже перенаправили пользователя на login page для недействительного сеанса, используя response.sendRedirect("login"). Однако вы также попытались продолжить цепочку запросов после перенаправления chain.doFilter(req, res).

return Попробуйте использовать ключевое слово здесь:

if (null == session) { 
    response.sendRedirect("login"); 
    return; // added 
} 
+0

Ошибка смены на 'Эта веб-страница имеет цикл перенаправления' –

+0

@AjmalMuhammad Это только поведение chrome или IE/firefox также показывают подобное поведение? –

+0

firefox показывает эту ошибку «Страница не перенаправляется должным образом Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен. –

Смежные вопросы