Entfernen Sie Kopf-Wert von HttpServletRequest
Geschrieben haben ich einen web-Dienst und bekommt die Anfrage in form HttpServletRequest
Objekt habe ich dann das senden der Header für die basic-Validierung-Prüfung für Leerzeichen oder null etc.
public void validateHeader(HttpServletRequest request)
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
genericHeaderValidator(key, value);
}
}
Wie Sie sehen können die request.getHeaderNames();
zurück Enumeration<String>
.
Aber in einigen webservices möchte ich überspringen der Validierung als den oben genannten code geschrieben in einer anderen Klasse, die ich will, um es zu halten intakt und möchten, dass die änderung vorgenommen werden Anrufer-Seite.
Zum Beispiel
wenn ich überspringen möchten Validierung von header mit der Bezeichnung "content-type" also, wenn ich request.removeAttribute("content-type");
Es nicht entfernen Sie die header-Attribut, also ging ich weiter und dachte, um es zu entfernen aus
Enumeration<String> headerNames
Aber Aufzählung nicht erlauben, uns zu entfernen, element.
Wer hat eine Idee, wie man entfernen Sie ein element aus dem header-Parameter von HttpServletRequest
Objekt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Attribut, Parameter und-Header, die alle drei Verschieden sind und im Kontext von HttpRequest. Also
request.removeAttribute("xyz");
entfernen ein Attribut mit dem Namenxyz
in der Anforderung nicht die header. Soweit ich weiß, können Sie nicht entfernen oder ändern der Header einfach so.Folgenden sind die verschiedenen Wege, die ich denken konnte, um dem Zweck zu dienen.
Option 1: Wenn die header zu ignorieren, ist konstant
Option 2: Wenn Sie Kopfzeilen ignoriert werden, für die Validierung ermittelt werden, indem der Anrufer (Ihr Fall). Übergeben Sie den Satz von überschriften, die nicht überprüft werden, wie diese:
So, hier übergeben Sie den Satz von Header von der Anrufer-Seite, die nicht validiert werden. Und beim Schleifen über die überschriften, die nur überprüfen, ob der header enthalten ist, in
headersToBeIgnored
, dann nicht bestätigen.Option 3: Verlängern HttpServletRequestWrapper
Als Sie sagte, daß Sie die Kopfzeile entfernen von der Anrufer-Seite, die akzeptierte Antwort hier (Hinzufügen eines HTTP-Header, um die Anforderung in einem servlet-filter) dient genau Ihren Zweck. Sie können erweitern
HttpServletRequestWrapper
und überschreibengetHeaderNames();
in die Sie zurückkehren können, eine weitere Aufzählung mit nur erforderlichen Header Hinzugefügt.Jedoch für jeden anderen Satz von Headern zurückgegeben werden, von einem anderen Anrufer, werden Sie brauchen, um eine separate Implementierung. So, das sollte in Ordnung sein, wenn Sie nicht zu viele verschiedene Anrufer.
In der oben genannten Antwort, die Sie benötigen, zu entfernen statt hinzuzufügen.
Adapter
Muster, woIterator
kann eine Ziel undEnumeration
werden Adaptee