Verpackung request-Parameter mit HTTPServletRequestWrapper

Ich habe einen filter, der sich authentifiziert/autorisiert REST-Aufrufe. Dieser Filter benötigt Zugriff auf die request-Parameter, so dass ich geschrieben habe, eine benutzerdefinierte HTTPServletRequestWrapper.

import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class WrapperRequest extends HttpServletRequestWrapper {
    private Map<String, String[]> requestParams = null;

    public WrapperRequest(final ServletRequest request) {
        super((HttpServletRequest) request);

    }

    @Override
    public String getParameter(final String name) {
        if (getParameterMap().get(name) != null) {
            return getParameterMap().get(name)[0];
        } else {
            getParameterMap().get(name)[0] = super.getParameter(name);
            requestParams.put(name, getParameterMap().get(name));
            return requestParams.get(name)[0];
        }

    }

    @Override
    public Map<String, String[]> getParameterMap() {
        if (requestParams == null) {
            requestParams = new HashMap<String, String[]>();
            requestParams.putAll(super.getParameterMap());
        }
        return Collections.unmodifiableMap(requestParams);
    }

    @Override
    public Enumeration<String> getParameterNames() {
        return Collections.enumeration(getParameterMap().keySet());
    }

    @Override
    public String[] getParameterValues(final String name) {
        return getParameterMap().get(name);
    }
}

In meinem filter-doFilter Methode:

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {


    final WrapperRequest wrappedRequest = new WrapperRequest(request);
    Map<String, String[]> paramMap = wrappedRequest.getParameterMap();
    chain.doFilter(wrappedRequest, response);

Aber ich bin immer die Warnung unten

ACHTUNG: EIN servlet-request an den URI
enthält form
die Parameter in den request-body, aber die Anforderung Körper verbraucht wurde
von der servlet-oder eine servlet-filter den Zugriff auf die request-Parameter.
Nur von Ressource-Methoden mit der @FormParam, funktionieren wie erwartet. Ressource
Methoden Verzehr der request-body die durch andere Mittel nicht funktionieren, da
erwartet.

Ich bin die Bereitstellung dieser im Tomcat. Hilfe!!!

InformationsquelleAutor user2289898 | 2013-05-31

Schreibe einen Kommentar