Ich arbeite an einer Seite, auf der Benutzer Profilinformationen bearbeiten können. Ich möchte, dass sie ihre öffentlichen Informationen bearbeiten können, ihnen aber nicht erlauben, Systemflags wie ihren Benutzertyp zu ändern.
Dies wird mit Spring MVC (3.0) implementiert. Das Benutzerobjekt hat typische Felder wie firstName
, lastName
, email
(alle sollten editierbar sein) und eine boolesche administrator
(die nicht editierbar sein sollte.
Meine Methode sieht ungefähr so aus:
%Vor% Mein Formular enthält die Felder firstName
, lastName
etc und schien gut zu funktionieren.
Das Problem besteht darin, dass ein böswilliger Benutzer, der eine Abfrage mit dem Parameter administrator
als "true" sendet, dieses Feld festlegen kann, wenn dies nicht der Fall ist.
Ich weiß, dass ich ein separates "Formular" -Objekt nur mit den Feldern erstellen kann, die ich ändern möchte, und das für das automatische Binden verwenden. (die Kopie über die Daten). Das Problem ist, dass ich viele Orte habe, die diese Technik benutzen. (für den Benutzer und andere Objekte). Es wäre mühsam zu warten, wenn ich Felder hinzufügen möchte.
Gibt es eine Möglichkeit, Anmerkungen oder andere Techniken in Spring MVC zu verwenden, um Parameter aufzulisten und Änderungen an beliebigen Domänenobjekteigenschaften zu verhindern?
Der DataBinder verfügt über zwei Eigenschaften mit den Namen allowedFields
und disallowedFields
, die definieren, was die Bindung zuzulassen oder zu verbieten ist. Benutze das in deiner @InitBinder
Methode:
Sie können die Anfrage mit den Ausdrücken "! myParam" filtern, um anzugeben, dass der angegebene Parameter nicht in der Anfrage enthalten sein soll.
%Vor%Tags und Links java spring spring-mvc