2015-07-01 11 views
14

W this Spring Boot application nie jest usługą internetową, która zwraca niektóre dane dla zalogowanego użytkownika:Jak znaleźć aktualnie zalogowanego użytkownika w Spring Boot?

@RequestMapping("/resource") 
public Map<String, Object> home() { 
    Map<String, Object> model = new HashMap<String, Object>(); 
    model.put("id", UUID.randomUUID().toString()); 
    model.put("content", "Hello World"); 
    return model; 
} 

wyobrazić, zwracana wartość metody zależy od tego, co użytkownik jest aktualnie zalogowany

Jak. mogę się dowiedzieć, który użytkownik jest zalogowany w tej metodzie?

Odpowiedz

43

Zgodnie życzenie:

wiosennego rozruchu, który wykorzystuje Spring Security internally dostarcza SecurityContextHolder klasy, który umożliwia wyszukiwanie aktualnie użytkownik uwierzytelniony przez:

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

Instancja authentication stanowi obecnie następujące metody:

  • Uzyskaj nazwę użytkownika zalogowanego użytkownika: getPrincipal()
  • Uzyskaj hasło uwierzytelnionego użytkownika: getCredentials()
  • Get przypisane role uwierzytelnionego użytkownika: getAuthorities()
  • uzyskać dalsze szczegóły uwierzytelnionego użytkownika: getDetails()
+7

Albo łatwiejsze i mniej inwazyjne, po prostu dodaj metodę argument typu 'Principal' jeśli jesteś zainteresowany tylko użytkownikowi, lub 'Uwierzytelnianie', jeśli chcesz więcej. Pozwala zaoszczędzić kłopotów z pracą z 'SecurityContextHolder'. –

+0

Witam, jak mogę użyć, gdzie powinienem umieścić to, aby uzyskać zalogowanego użytkownika? Dziękuję –

+0

@KamelMili Ponieważ Spring Security zwykle jest filtrem wiszącym tuż przed wprowadzeniem logiki aplikacji, powinieneś mieć dostęp do uwierzytelniania z niemal dowolnego miejsca Twoje zgłoszenie. Nie wiem jednak, czy to odpowiada na twoje pytanie. –

0

można po prostu użyć HttpServletRequest również uzyskać zasada użytkownika,

użyciu HttpServletRequest prośba,

String user=request.getUserPrincipal().getName(); 
0

Jednym ze sposobów jest dodanie java.security.Principal jako parametr w następujący sposób:

@RequestMapping("/resource") 
public Map<String, Object> home(Principal principal) { 
    Map<String, Object> model = new HashMap<String, Object>(); 
    model.put("id", UUID.randomUUID().toString()); 
    model.put("content", "Hello " + principal.getName()); 
    return model; 
} 
Powiązane problemy