Wie umgehe ich Fehler Staaten in servlet-filtern, ohne dass der Benutzer einen stack-trace?

Arbeite ich an einem Steg/RESTEasy-app. Wenn ich werfe einen WebApplicationException(myResponse) von einem meiner REST-Endpunkte, sendet er die gegebene Antwort an den client.

Wenn ein filter einen Fehler erkennt, ich will das gleiche Verhalten:

  1. Sie sollten aufhören, die Ausführung von Verfahren, und
  2. Sollte es Sie geben dem Anwender eine klare, JSON-Fehler, die nicht durch einen stack-trace.

Offensichtlich, gerade beim schreiben der Antwort-stream und returning arbeitet innerhalb der doFilter Methode. Aber dies funktioniert nicht für andere Methoden aufgerufen doFilter.

Werfen einer Ausnahme entsprechen wird Bedingung #1, aber ich habe nicht herausgefunden, eine vernünftige Weise zu erfüllen, Bedingung #2 dann. (Sie können sehen, meine beste Versuch an der Unterseite.)

Als Wahrnehmung erklärt in seiner Antwort, WebApplicationExceptions behandelt werden wie jeder andere Ausnahme, die im Kontext eines Filters, und damit geben Sie dem Benutzer eine schön hässliche stack-trace.

Also zusammenfassend meine Fragen:

  • Tun serveltt Container haben eine gleichwertige zu throw new WebApplicationException(Response)?
  • Und vielleicht noch wichtiger ist, wie gehen andere java-Projekte?

Ich habe diesen code in ein filter und es funktioniert, aber ich würde lieber eine elegante Lösung, die automatisch für alle Filter:

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());
    }
}

InformationsquelleAutor Nathan Friedly | 2013-02-08

Schreibe einen Kommentar