2013-04-20 1 views
6

JSF-приложения могут сбрасывать ViewExpiredException с, когда срок действия сеанса истек. Это событие будет довольно распространенным явлением, когда гости будут в вашей системе. Therefor приложение будет обрабатывать это событие без каких-либо проблем для гостя следующим образом:ViewExpiredException обрабатывается страницей с ошибкой, все еще в журнале

<error-page> 
    <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
    <location>/expired</location> 
</error-page> 

Когда гость пытается отправить запрос на истекшей сессии, он будет перенаправлен на /expired. Поскольку я не считаю этот Exception проблемой, о которой стоит упомянуть, я бы хотел предотвратить запись stacktrace в журнал моего сервера приложений.

Как это сделать?

ответ

7

Существует в основном 2 варианта, каждый из которых сводится к одному и тому же решению: поймать, подавить и перейти на страницу ошибок самостоятельно, используя либо servlet filter, либо JSF exception handler. Таким образом, исключение не достигнет сервера servletcontainer, который затем обрабатывал бы и регистрировал бы его автоматически.

При условии, что страница с ошибкой действительно выполняет задание для вас (это не будет работать с запросами AJAX JSF, если у вас нет настраиваемого JSF ExceptionHandler), затем фильтр сервлета, сопоставленный по шаблону URL-адреса, соответствующему запросам JSF, который делает следующее в методе doFilter() должно хватить:

try { 
    chain.doFilter(request, response); 
} catch (ServletException e) { 
    if (e.getRootCause() instanceof ViewExpiredException) { 
     request.getRequestDispatcher("/expired").forward(request, response); 
    } else { 
     throw e; 
    } 
} 

Если вы хотите, чтобы покрыть запросы JSF AJAX, а также, то вы не можете пойти вокруг JSF обработчика исключений. Отправляйтесь в следующих связанных с ответами, чтобы увидеть некоторые конкретные примеры:

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

  • Нет связанных вопросов^_^