2016-09-13 5 views
0

Я создал простое приложение WebMVC - с настроенным перехватчиком обработчика. Ответственность перехватчиков проста - он должен проверить, существует ли действующий сеанс в HttpRequest - и если это так, перенаправляйте на страницу регистрации.Spring MVC HandlerInterceptor: Redirect Failed

Проблемы я сталкиваюсь в том, что на редиректе - браузер бросает сообщение:

страница не перенаправив правильно

Firefox определил, что сервер перенаправляет запрос на этого адрес, который никогда не будет завершен.

Код перехватчики выглядит следующим образом:

public class LoginInterceptor extends HandlerInterceptorAdapter{ 



// to be used checking session management for user. 
@Override 
public boolean preHandle(HttpServletRequest request, 
         HttpServletResponse response, 
         Object handler) throws Exception { 


    System.out.println(" <interceptor> - this is pre handle"); 

    return true; 
} 


@Override 
public void postHandle(HttpServletRequest request, 
         HttpServletResponse response, Object handler, 
         ModelAndView modelAndView) throws Exception { 

    System.out.println(" <interceptor> - this is post handle"); 

    HttpSession session = request.getSession(); 
    User user = (User) session.getAttribute("user"); 


    System.out.println(" <interceptor> - session id is --> " + session.getId()); 
    System.out.println(" <interceptor> - session create time is --> " + session.getCreationTime()); 
    System.out.println(" <interceptor> - session last accessed time is --> " + session.getLastAccessedTime()); 

    try { 
     System.out.println(" <interceptor> - user info is --> " + user.toString()); 
    }catch(Exception e){ 
     e.toString(); 
    } 

    try{ 
     if(session != null){ 
      response.sendRedirect("register"); 
      return; 
     } 
    }catch(Exception e){ 
     e.toString(); 
    } 

} 


public void afterCompletetion(){ 
    System.out.println(" <interceptor> - this is after completion"); 

} 

}

Я попытался добавить полный контекст запроса пути к редиректу - а также корневой контекст - оба не прошедший , Я не вижу, где я терплю неудачу, так что любая помощь очень ценится.

+0

Не уверен, что это просто проблема с C & P ... но проверьте последний метод ... вы его опечалили. Public void afterCompletetion() {должно быть публичным void afterCompletion() {и не забудьте использовать @ Override, вы сами нашли проблему ... – Paolof76

+0

Изменить на 'response.sendRedirect (request.getContextPath() +"/register ");' –

ответ

3

Какой бы ни был перехватчик, который вы написали, будет отображаться для всех запросов.

Так что, когда он будет перенаправлять на /register это время также он достигнет перехватчик он найдет, что session не пустая и снова redirect..and то же самое продолжается ... бесконечного перенаправления на тот же запрос.

@Override 
public void postHandle(HttpServletRequest request, 
         HttpServletResponse response, Object handler, 
         ModelAndView modelAndView) throws Exception { 
    HttpSession session = request.getSession(); 
    try{ 
     if(session != null){       //Infinite 
      response.sendRedirect("register"); 
      return; 
     } 
    }catch(Exception e){ 
     e.toString(); 
    } 

} 

Так Убедитесь, что она будет перехватывать только один просьбе configuration или code

if((request.getRequestURI().equals(contextPath+"/someURI") && session != null){ 
    response.sendRedirect("register"); 
} 

Тогда он будет проверять только для конкретного запроса и перенаправить к Register.it обыкновению упал в бесконечном цикле ,

0

Проверьте конфигурацию ваших перехватчиков, чтобы увидеть, допускает ли она только определенный шаблон URL.

См. Пример ниже.

<!-- Configures Interceptors --> 
<mvc:interceptors> 
    <!-- This XML will intercept all URIs --> 
    <bean class="com.howtodoinjava.interceptor.DemoInterceptor"></bean> 

    <!-- This XML will apply interceptor to only certain URIs --> 
    <!-- 
    <mvc:interceptor> 
      <mvc:mapping path="/users"></mvc:mapping> 
      <bean class="com.howtodoinjava.interceptor.DemoInterceptor"></bean> 
    <mvc:interceptor> 
     --> 
</mvc:interceptors>