Class FacesExceptionFilter

java.lang.Object
org.omnifaces.filter.HttpFilter
org.omnifaces.filter.FacesExceptionFilter
All Implemented Interfaces:
Filter

public class FacesExceptionFilter extends HttpFilter

The FacesExceptionFilter will solve 2 problems with exceptions thrown in Faces methods.

  1. Mojarra's FacesFileNotFoundException needs to be interpreted as 404.
  2. Root cause needs to be unwrapped from FacesException and ELException to utilize standard Servlet API error page handling.

Noted should be that this filter won't run on exceptions thrown during ajax requests. To handle them using web.xml configured error pages, use FullAjaxExceptionHandler.

Since version 3.2, the FacesExceptionFilter also logs exceptions with an UUID and IP via the logException(HttpServletRequest, Throwable, String, String, Object...) method. The UUID is in turn available in EL by #{requestScope['org.omnifaces.exception_uuid']}.

Installation

To get it to run, map this filter on an <url-pattern> of /* in web.xml.

 <filter>
     <filter-name>facesExceptionFilter</filter-name>
     <filter-class>org.omnifaces.filter.FacesExceptionFilter</filter-class>
 </filter>
 <filter-mapping>
     <filter-name>facesExceptionFilter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>
 

Note that since OmniFaces 4.5, the FullAjaxExceptionHandler will automatically register the FacesExceptionFilter on its default URL pattern of /* when it is absent in web.xml, so you do not need to explicitly register it then.

Error pages

Please refer the "Error pages" section of the FullAjaxExceptionHandler javadoc for recommended error page configuration.

Configuration

Please refer the "Configuration" section of the FullAjaxExceptionHandler javadoc for available context parameters.

Customizing FacesExceptionFilter

If more fine grained control is desired for logging the exception, then the developer can opt to extend this FacesExceptionFilter and override one or more of the following protected methods:

Author:
Bauke Scholtz
See Also:
  • Constructor Details

    • FacesExceptionFilter

      public FacesExceptionFilter()
  • Method Details

    • init

      public void init() throws ServletException
      Description copied from class: HttpFilter
      Convenience init() method without FilterConfig parameter which will be called by init(FilterConfig).
      Overrides:
      init in class HttpFilter
      Throws:
      ServletException - When filter's initialization failed.
    • doFilter

      public void doFilter(HttpServletRequest request, HttpServletResponse response, HttpSession session, FilterChain chain) throws ServletException, IOException
      Description copied from class: HttpFilter
      Filter the HTTP request. The session argument is null if there is no session.
      Specified by:
      doFilter in class HttpFilter
      Parameters:
      request - The HTTP request.
      response - The HTTP response.
      session - The HTTP session, if any, else null.
      chain - The filter chain to continue.
      Throws:
      ServletException - As wrapper exception when something fails in the request processing.
      IOException - Whenever something fails at I/O level.
      See Also:
    • logException

      protected void logException(HttpServletRequest request, Throwable exception, String location, String message, Object... parameters)
      Log the thrown exception and determined error page location with the given message, optionally parameterized with the given parameters. The default implementation logs through java.util.logging as SEVERE when the thrown exception is not an instance of any type specified in context parameter "org.omnifaces.EXCEPTION_TYPES_TO_IGNORE_IN_LOGGING". The log message will be prepended with the UUID and IP address. The UUID is available in EL by #{requestScope['org.omnifaces.exception_uuid']}.
      Parameters:
      request - The involved servlet request.
      exception - The exception to log.
      location - The error page location.
      message - The log message.
      parameters - The log message parameters, if any. They are formatted using Formatter.
      Since:
      3.2