Coldfusion 10 ermöglicht die Festlegung eines Grenzwerts für die maximale Anzahl von POST-Anforderungsparametern (Servereinstellungen / Einstellungen / Anforderungsgrößenbeschränkungen / Maximale Anzahl von POST-Anforderungsparametern). Das Standardlimit ist 100.
Ist es möglich, zu fangen, wenn dieses Limit überschritten wurde, damit es mit einem benutzerdefinierten Handler behandelt werden kann? Wenn ja, wie?
Ich habe versucht, es mit einem Site-Wide Error-Handler und einer onError () -Methode in Application.cfc abzufangen. Kein Versuch war erfolgreich.
Danke fürs Schauen.
Ich kann das Verhalten bestätigen, das Sie sehen. Ich denke, die Ausnahme wird vom CF-Servlet ausgelöst, bevor Application.cfc aufgerufen wird, was erklären würde, warum onError
niemals ausgelöst wird.
Bisher ist die einzige Option, die für mich funktionierte, das Hinzufügen eines benutzerdefinierte Fehlerseite in WEB-INF\web.xml
mit einem HTTP-Statuscode:
Hinweis: @Adrian hat in den Kommentaren erwähnt, dass er das oben genannte zu \cfusion\runtime\conf\web.xml
hinzugefügt hat und nicht das in web-inf\
.
Update 1:
Weitere Informationen deuten darauf hin, dass Sie die Dinge auch auf einer detaillierteren Ebene konfigurieren können. Um eine bestimmte Art von Ausnahme zu behandeln, verwenden Sie <exception-type>
anstelle von %Code%. Zum Beispiel:
Das heißt, in meinem (kurzen) Test schien CF10 sehr allgemeine Ausnahmeklassen für diesen Fehler zu verwenden. Beides hat viele mögliche Ursachen, nicht nur zu viele Formularfelder zu posten. Behalte das im Hinterkopf. Zugegeben, es ist ein wenig konzentrierter als die Behandlung aller HTTP 500-Fehler, aber es kann auch andere Ursachen umfassen.
%Vor%
Update 2:
Stellt sich heraus, dass <error-code>
nur ein Ablenkungsmanöver war. Wie @AdrianWright in den Kommentaren darauf hingewiesen hat, hängt dieser Fehler mit den Debugging-Einstellungen zusammen. Wenn CF die Meldung "Maximale Anzahl von POST-Anforderungsparametern" generiert, wird das Debugging nicht ordnungsgemäß berücksichtigt, was wiederum eine neue Ausnahme verursacht: javax.servlet.ServletException
. Daher der HTTP 500-Fehler:
Wenn das Debugging deaktiviert ist (wie in einem Produktionssystem), schreibt CF einfach eine Fehlermeldung direkt in den Antwortstream und gibt den HTTP-Statuscode 400 zurück. Da keine Ausnahme ausgelöst wird, ist java.lang.IllegalStateException
hier unbrauchbar. Sie müssen also den Statuscode verwenden:
Auf der Seite für benutzerdefinierte Fehler können Sie jedoch die Fehlermeldung aus dem Anforderungsstream
Wenn das Limit überschritten wird, gibt es Einträge in der ColdFusion-Ausnahme und im Anwendungsprotokoll.
Tags und Links http coldfusion post coldfusion-10