2017-11-03 2 views
0

Ich bin neu in Java Spring. Ich erstelle ein Projekt, das Spring Boot verwendet, und ich muss Benutzer-ID des aktuellen Benutzers abrufen. Soweit ich weiß, können wir mithilfe von Sicherheitskontext Haltern aktuelle angemeldete Benutzer bekommen und hier ist mein Code:wie bekomme ich userID von db mit Feder Sicherheit

@RequestMapping(value="/posts/create", method=RequestMethod.GET) 
    public String addPost(String username, Model model){ 
     Authentication auth= SecurityContextHolder.getContext().getAuthentication(); 
     String name=auth.getName(); 
     UserDetails userDetial= (UserDetails) auth.getDetails(); 

     Users user= uRepo.findByUsername(userDetial.getUsername()); 
     Long id= user.getId(); 

     model.addAttribute("add", new Post()); 
     model.addAttribute("userId", id); 
     model.addAttribute("authorName", name); 
     return "posts/create"; 

    } 

Ich weiß nicht, was mit meinem Code falsch ist, wie ich eine Fehlermeldung anzeigt: „org .springframework.security.web.authentication.WebAuthenticationDetails können nicht in org.springframework.security.core.userdetails.UserDetails umgewandelt werden ".

Gibt es jemanden, der es mir erklären kann?

Antwort

0

Die Fehlermeldung scheint klar zu sein, können Sie dies nicht tun:

UserDetails userDetial= (UserDetails) auth.getDetails(); 

Aber Sie können dies tun:

UserDetails userDetails = (UserDetails)auth.getPrincipal(); 

oder für kurze können Sie auch direkt java.security.Principal Schnittstelle injizieren als

folgen
public String addPost(String username, Model model, Principal principal){ 
    String userUsername = principal.getName(); //gives you the username of the connected user 
} 
+0

Vielen Dank. Es klappt. Jetzt habe ich ein anderes Problem in meinem Projekt. Ich wäre Ihnen dankbar, wenn Sie mir antworten könnten. Ich habe 2 Tabellen Benutzer und Post welcher Autor wäre Benutzername in Benutzer Tabelle. Ich weiß nicht, wenn ich den obigen Weg benutze, um Benutzer-ID zu erhalten, der Benutzer ist jetzt in der Lage, nur 1 Post zu erstellen, dann der Fehler: "java.lang.StackOverflowError: null" auftreten. Dann entferne ich diesen Weg, ich meine ich gebe die Benutzerkennung manuell ein, das System funktioniert einwandfrei. Ich brauche die userId, um 2 Tabellen nebenbei zu verbinden – Alice

+0

Erstellen Sie einen anderen Beitrag für diesen und fügen Sie den Link hier als einen Kommentar hinzu, so werde ich antworten – akuma8

Verwandte Themen