Naplózása HttpRequest paraméterek és kérelem szövege

szavazat
8

Próbálom egy kérelmet napló az én web app. Én a tavaszi 3. 0.

Én végre egy osztály kiterjesztése HandlerInterceptorAdapterés használta a preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)elfogására a kérelmet.

Az eljárás során azt akarom, hogy be tudjon lépni a kérelmet szervezet (én paraméterek objektumok XML hogy meg vannak írva közvetlenül a kérelem szövege), és ezért én használ request.getReader();

A probléma az - később kapok egy IllegalStateExceptionrugó esetén vezérlőt próbálja olvasni a kérelmet.

Van egy módja annak, hogy amit kívánok?

A kérdést 12/06/2011 13:03
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
5

Megteheti ezt egy szűrővel. A kérés paraméterei könnyen kezelhetők. Azonban foglalkozik azzal a kéréssel test lesz sokkal nehezebb, és szükség csomagolás a servlet kérelmet lásd: HttpServletRequest .

Meg kell nézni, hogy milyen nagy a bejövő kérés, és eldönti, hogy kíván-e tárolni a kérelmet test, mint egy tmp fájl vagy string.

Meg kell majd felülírni ServetRequest.getInputStream () és a fájl vagy a tárolt karakterláncot, amely használható a fakitermelés.

Ha a kérés test hatalmas Azt javasoljuk, amivel a bemeneti folyamot egy pufferelt bemeneti folyam, majd kiolvassuk kezdetét a szervezetben.

public class LogRequest extends HttpServletRequestWrapper {

    public LogRequest(HttpServletRequest request) {
        super(request);
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
        //read from tmp file or string.
    }

    @Override
    public BufferedReader getReader() throws IOException {
        //read from tmp file or string
    }

}
Válaszolt 12/06/2011 13:48
a forrás felhasználó

szavazat
4

Spring egy kész szűrő tenni, hogy az Ön számára - hogy használat AbstractRequestLoggingFilterés alosztályok leírt ezt a választ .

Légy tudatában annak, hogy ha ezt a megoldást, a kérelmet szervezet lesz bejelentkezve csak a kérelem feldolgozását követően, és a test már olvasható az alkalmazás.

Válaszolt 27/11/2014 10:23
a forrás felhasználó

szavazat
0

Egyszerű implementáció kis kéréseket. Ne használja többrészes kérelmet.

package ru.rbs.logger.web;

import org.apache.commons.io.IOUtils;

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

class CachedRequestWrapper extends HttpServletRequestWrapper {
    private final byte[] cachedBody;

    CachedRequestWrapper(HttpServletRequest request) throws IOException {
        super(request);

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        IOUtils.copy(request.getInputStream(), bos);
        cachedBody = bos.toByteArray();
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
        return new CachedServletInputStream();
    }

    byte[] toByteArray(){
        return cachedBody;
    }

    private class CachedServletInputStream extends ServletInputStream {
        private InputStream baseInputStream;

        CachedServletInputStream() throws IOException {
            baseInputStream = new ByteArrayInputStream(cachedBody);
        }

        @Override
        public boolean isFinished() {
            return false;
        }

        @Override
        public boolean isReady() {
            return false;
        }

        @Override
        public void setReadListener(ReadListener readListener) {

        }

        @Override
        public int read() throws IOException {
            return baseInputStream.read();
        }
    }
}
Válaszolt 06/02/2017 10:23
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more