2012-12-05 4 views
0

Я столкнулся с проблемой при разработке фильтра с днем ​​CQ в моем проекте. Мой код работает с методом forwardDispatcher. Но с response.sendRedirect() он не работает.sendRedirect не работает

if (servletRequest instanceof SlingHttpServletRequest) { 
    HttpServletRequest httpRequest = (HttpServletRequest) servletRequest; 
    HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; 
    String uri = httpRequest.getRequestURI(); 

    if(uri.startsWith("/content")){ 
    Cookie[] cookies = httpRequest.getCookies(); 
    boolean found = false; 
     for (Cookie cookie : cookies) { 
     log.info("Cookies in filter: " + cookie.getName()); 
     if("LtpaToken2".equals(cookie.getName())){ 
      log.info("LTPA token found "); 
      found = true; 
      break; 
     } 
    } 
    if(found){ 
     filterChain.doFilter(servletRequest, servletResponse); 
    } 
    else{ 
     httpResponse.sendRedirect("http://www.google.com"); 
    }   
    }else{ 
     filterChain.doFilter(servletRequest, servletResponse); 
    } 

log.info("Message URL ::"+httpRequest.getRequestURL().toString()); 
log.info("URI ::"+uri); 
} 

Поэтому, пожалуйста, решите мою проблему, это очень полезно.

С уважением Narsi р

+0

Нужно ли использовать SlingHttpServletRequest для HttpServletRequest? SlingHttpServletRequest расширяет HttpServletRequest. – antonyh

+0

Можете ли вы представить контекст для вышеуказанного кода? Что это за класс/метод? – shsteimer

ответ

0

Я не знаю, о весне, но в JEE вы не можете манипулировать ответ подобное в фильтр. Вы получите IllegalStateException при использовании sendRedirect или sendError.

Мой совет - никогда не использовать эти абстракции. Вы хотите указать заголовок ответа и закрыть запрос.

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
response.setHeader("Location", ""http://www.google.com"); 
return;