2017-02-15 4 views
1

Ich versuche, ein Formular für den Benutzer zu erstellen ändern sie eigene private Daten sind (Adresse, Alter ...) in meiner Web-Anwendung:Wie eine Datenveränderung Form im Frühjahr schaffen

  • Der Blick :

    public class UserDetailsView { 
    
        private Long userId; 
        private String name; 
        ... 
    } 
    

    im @GetMapping der Formularseite ich alle Benutzerdaten in der Formularansicht laden und dann die geladene Ansicht Thymeleaf senden und die endgültige HTML, das alles proccess funktioniert gut schaffen.

  • Mein Problem ist:

Aus offensichtlichen Gründen wird das Formular nicht ein Feld der userId Variable hat und ich möchte nicht ein verstecktes Feld auf die ID erstellen böswillige Benutzer zu vermeiden das kann das Feld userId leicht ändern.

  • Meine Frage ist:

Wie die gleiche UserDetailsView Instanz in der Server-Seite zu halten, die userId variable Inhalte zu halten, nur die Variablen zu ändern in Form zu Feld zu tun? Tatsächlich sucht meine Lösung in der Datenbank nach dem protokollierten Benutzer, um seine ID zu erhalten, und aktualisiert dann die Tabelle UserDetails.

Antwort

0

Wenn Benutzer nur die Daten ändern können, die sich auf sie beziehen, behalten Sie einfach die userId (und möglicherweise die restlichen Benutzerdetails, die Sie möglicherweise in der gesamten Anwendung benötigen) in der Sitzung.

+0

aber für eine andere Art von Daten anstelle der Benutzern Informationen zu erhalten? Beispiel: Der Benutzer möchte die Daten eines Registers ändern, das aus einer "1-n" -Beziehung stammt, wie die Beschreibung eines seiner Bücher. Ich weiß nicht, ob ich klar war –

0

vor allem, wenn Sie die das Formular abzuschicken versuchen, sollten Sie POST-Methode @GetMapping ist eine bestandene Annotation verwenden, der als Abkürzung dient für @RequestMapping(method = RequestMethod.GET)

, was Sie sollten auf Ihrem Controller-Methode verwenden wird etwas wie

@RequestMapping(value = "/update", method = RequestMethod.POST) 

Zweitens sollte der Benutzer, der versucht, seine Details zu aktualisieren, bereits angemeldet und authentifiziert sein. es sollte nicht aus dem Formular kommen. Hier ist ein Beispiel dafür, wie angemeldeten Benutzer mit Federsicherheits

How to get the current logged in user object from spring security?