Wie auf Antwort schreiben filter?
Gibt es eine Möglichkeit, mit nur Resonanz in einem filter .
Ist der code unten geschrieben richtig ?
public void doFilter(request , response , chain) {
//code to handle request
chain.doFilter(request, response);
//code to handle response .
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, was Sie wollen. Im Allgemeinen, Ihre Probe ist nicht korrekt obwohl. Nach
chain.doFilter
zurückgegeben hat, ist es zu spät, etwas zu tun mit der Antwort. An diesem Punkt, die gesamte Reaktion wurde bereits an den client gesendet und der code hat keinen Zugriff darauf.Was Sie tun müssen, ist, wickeln Sie
request
- und/oderresponse
in Ihren eigenen Klassen, übergeben Sie diese Wrapper indoFilter
Methode, um jegliche Verarbeitung in Ihrer Wrapper.Um es einfacher zu machen, gibt es bereits-Wrapper verfügbar in der servlet-api: siehe
HttpServletRequestWrapper
undHttpServletResponseWrapper
Klassen. Wenn Sie möchten, Prozess Ausgang, der tatsächlich an Kunden, die Sie auch benötigen, schreiben Sie benutzerdefinierte Ausgabestrom oder Schriftsteller-Wrapper, und kehren diese aus Ihren HttpServletResponse-wrapper. Ja, viel zu Verpacken 🙂Einige einfachere Filter arbeiten können, ohne Verpackung-Anforderung oder-Antwort: z.B. vor dem Aufruf
doFilter
können Sie bereits Zugriff auf request-Header oder senden Sie benutzerdefinierte Antwort ohne AufrufdoFilter
. Aber wenn Sie wollen, um die Anfrage Bearbeiten Körper, Sie können nicht nur Lesen, ansonsten ist es nicht verfügbar sein, um den rest der Kette. In diesem Fall müssen Sie die Wickeltechnik wieder.Den code, den Sie zeigen, ist so nicht ganz richtig, aber mit einer notwendigen Vereinfachung der Terminologie - es ist. Sie können mit "- Griff" eine Anfrage auch nach
chain.doFilter(..)
(und Antwort, bevor Sie).Was
chain.doFilter(..)
bedeutet, dass der Prozess der übergabe an das gewünschte Ziel, und wenn von der Methode zurückgegeben wird, hat das Ziel vollendet seinen Ausgang.Also um genauer zu sein - es ist 'bevor' und 'nachdem' die Anfrage wurde bearbeitet und eine Antwort generiert.
Dein code scheint in Ordnung zu sein.
Wenn Sie nur wollen, zu behandeln, die Antwort, können Sie einfach fügen Sie Ihren code in die
//Code to handle response .
Abschnitt und tun, was Sie möchten.Wenn Sie wollen, etwas zu tun mit dem Ausgang, werden Sie einen speziellen response-wrapper verarbeitet den Ausgabestrom in der Antwort, wo das servlet (und andere Filter) schreiben, um.
Anfrage und die Antworten sind readonly.Damit Sie nicht über die setter-Methoden zum ändern des Inhalts, dass.Aber mit der "HttpServletRequestWrapper und HttpServletResponseWrapper" - Klassen, die vorgesehen sind gebaut von java können wir ändern Ihren Inhalt.Wir sind Kapselung der ursprünglichen request-und response-Objekte, die von der wrapper-Objekte durch ändern der wrapper-Objekte, die wir können wirklich ändern Sie die ursprünglichen request-und response-Objekte.
Ich gefiltert die Antwort von unten mit code :