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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie sind mit Jersey für Ihre REST-framework?
Ich denke, das ist im Grunde sagen, dass da das Servlet hat jetzt konstruiert das Request-Objekt, Jersey jetzt nicht sagen, den Unterschied zwischen Formular-Parameter und query-string-Parameter.
Sehen, dazu noch einige details: https://issues.apache.org/jira/browse/STANBOL-437
Dies wirft die Frage - ist das tatsächlich verursacht Sie ein Problem oder sind Sie nur besorgt über die Warnung?
InformationsquelleAutor stringy05
Recht. So habe ich das leiden dieses Problem, und ich habe versucht, es zu lösen auf verschiedenen wegen, aber ich habe nicht wollen, zu ändern meine web.xml Einstellungen, nur wenn ich da war, meine Prüfung Anwendung mit Postbote es funktionierte perfekt, aber wenn es war, integrierend mit der webapp schlägt er mit dem genannten Problem (
A servlet request to the URI {MY_URI} contains form parameters in the request body but the request body has been consumed by the servlet or a servlet filter accessing the request parameters. Only resource methods using @FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.
)So, wie @clijk erwähnt, müssen Sie nur setzen Sie Ihre überschriften als:
voilà, die Warnung ist Weg.
Dank
InformationsquelleAutor facundofarias