2016-01-01 7 views
0

Вот мой метод перехватчика, где я хочу, чтобы установить пользовательский ответ сказать UI, что произошлоУстановка пользовательского ответа весной перехватчик

@Override 
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
       throws Exception { 
    HttpSession session = request.getSession(false); 
    if (session != null) 
     return true; 
     else{ 
     response.sendError(HttpServletResponse.SC_REQUEST_TIMEOUT) 
     return false; 
     } 
    } 

И в web.xml

<error-page> 
    <error-code>408</error-code> 
    <location>/error.html</location> 
</error-page> 

весна-сервлет. xml

<mvc:interceptors> 
     <mvc:interceptor> 
      <mvc:mapping path="/**" /> 
      <mvc:exclude-mapping path="/login" /> 
      <bean class="com.example.CustomInterceptor" /> 
     </mvc:interceptor> 
    </mvc:interceptors> 

Когда сеанс завершен, он не отправляет никакого ответа после возврата false. Даже ниже не работает

response.sendRedirect("http://localhost:8080/home"); 
+0

Как вы полный URL выглядит? –

ответ

0

Вы можете попробовать очень простую вещь. Измените mvc:interceptros структуру

<mvc:interceptors> 
    <bean class="com.example.CustomInterceptor" /> 
</mvc:interceptors> 

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

Теперь, как вы знаете, перехватчики настроены на уровне HandlerMapping и будет RequestMappingHandlerMapping (Spring 3.1+ с mvc:annotation-driven) или DefaultAnnotationHandlerMapping в вашем случае.

Теперь, когда вы используете <mvc:mapping path="/**" />, будет отображаться все запросы (включая подпапки), если они являются действительными сопоставлениями. Так позволяет сказать, что у вас есть контроллер

@RequestMapping(value="/home", method = RequestMethod.GET) 
public String welcome() { 
    return "welcome"; 
} 

вы не можете нажать http://localhost:8080/yourProjectName/home/test и ожидать, что она попала в перехватчик. Таким образом, вы должны нажать http://localhost:8080/yourProjectName/home, так как это действительный HandlerMapping.

Что касается ответа, сначала отлаживайте, если ваш перехватчик получает удар по любым запросам. Если это не работает, то

response.sendError(HttpServletResponse.SC_REQUEST_TIMEOUT); 

должен перенаправить вас на error.html, как вы использовали

<error-page> 
    <error-code>408</error-code> 
    <location>/error.html</location> 
</error-page>