【问题标题】:ViewExpiredException handled by error-page, still in logViewExpiredException 由错误页面处理,仍在日志中
【发布时间】:2013-04-13 16:54:12
【问题描述】:

JSF 应用程序可以在会话过期时抛出ViewExpiredExceptions。当您的系统上有客人时,此事件将很常见。因此,应用程序将处理此事件而不会为客人带来任何麻烦,如下所示:

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

当访客尝试在过期会话上发送请求时,他将被重定向到/expired。由于我不认为这个Exception 是一个值得一提的问题,我想阻止将堆栈跟踪写入我的应用程序服务器的日志。

我怎样才能做到这一点?

【问题讨论】:

    标签: java jsf jsf-2 glassfish-3


    【解决方案1】:

    基本上有 2 个选项,每个选项都归结为相同的解决方案:使用 servlet filter 或 JSF exception handler 自行捕获、抑制和导航到错误页面。这样异常就不会到达 servletcontainer,它会自动处理并记录它。

    假设错误页面确实为您完成了这项工作(这不适用于 JSF ajax 请求,除非您有自定义 JSF ExceptionHandler),然后一个 servlet 过滤器映射到与 JSF 请求匹配的 URL 模式上在其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 异常处理程序。前往以下相关答案以查看一些具体示例:

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 2012-02-12
      • 1970-01-01
      • 2011-03-13
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多