¿Cómo manejo los estados de error en los filtros de servlet sin mostrar al usuario un seguimiento de pila?

Estoy trabajando en una aplicación Jetty / RESTEasy. Si lanzo unWebApplicationException(myResponse) desde uno de mis puntos finales REST, envía la respuesta dada al cliente.

Cuando un filtro detecta un error, quiero el mismo comportamiento:

Debe detener la ejecución de la ejecución, yDebería dar al usuario un error claro con formato JSON que no incluya un seguimiento de la pila.

Obviamente, solo escribo al flujo de respuesta yreturntrabaja desde dentro de ladoFilter método. Pero esto no funciona para otros métodos llamados pordoFilter.

Lanzar cualquier excepción cumplirá con la condición # 1, pero no he encontrado una forma sensata de cumplir la condición # 2 en ese momento. (Puedes ver mi mejor intento en la parte inferior.)

Como lo explicó la Percepción en su respuesta,WebApplicationExceptionLos s se tratan como cualquier otra excepción en el contexto de un filtro, y por lo tanto le dan al usuario un buen rastro de pila feo.

Entonces, para resumir mis preguntas:

¿Los contenedores serveltt tienen algún equivalente athrow new WebApplicationException(Response)?Y quizás más importante, ¿cómo otros proyectos de Java manejan esto?

Tengo este código en un filtro y funciona, pero preferiría una solución más elegante que se aplique automáticamente a todos los filtros:

public void doFilter(final ServletRequest   request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
    try {
        doFilterOrThrow(request, response, chain);
    } catch (WebApplicationException e) {
        Response res = e.getResponse();
        ((HttpServletResponse) response).sendError(res.getStatus(), (String) res.getEntity());
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta