5

Ich würde gerne wissen, wie ich das User-Objekt von Thymeleaf bekommen kann. Momentan rufe ich meinen userService auf, der den Benutzer aus der DB holt. Ich mag diesen Ansatz nicht, weil für jeden Aufruf eine DB-Abfrage erstellt wird.Spring boot + thymeleaf: eingeloggt user

Ist es möglich, den Benutzer aus dem Speicher zu bekommen?

<link href="/css/style2.css" 
    th:if="${@commanderService.getCurrentCommander()} and 
     ${@commanderService.getCurrentCommander().settings == 'template=1'}" 
    rel="stylesheet" type="text/css" /> 

CommanderService:

public Commander getCurrentCommander() { 
    Object principal = 
     SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    Commander commander = findByName((String)principal); 

    return commander; 
} 
+0

Sie Zugang zum Haupt haben in die 'RequestMappingMethod' –

+0

Verwenden Sie einen benutzerdefinierten UserDetailsService? Wenn ja, können Sie Ihre Implementierung bereitstellen? –

+0

Robert: ja, aber es ist leer - Es hat nur die findUserByName Methode, die Null –

Antwort

3

Wenn Sie Feder Sicherheit und thymeleaf verwenden, können Sie überprüfen: https://github.com/thymeleaf/thymeleaf-extras-springsecurity3
Zum Beispiel:

<div sec:authentication="name"> 
    The value of the "name" property of the authentication object should appear here. 
</div> 

<div sec:authorize="hasRole('ROLE_ADMIN')"> 
    This content is only shown to administrators. 
</div> 
+0

gibt Ihnen nur den Namen des SecurityObject - was ich brauche ist ein anderes Feld aus dem Benutzerobjekt –

+0

Ich verstehe @AlexTbk, wenn Sie brauchen Die vollständige Benutzerobjekt-1-Option besteht darin, sie dem Modell hinzuzufügen, oder Sie können auch darauf zugreifen, wie Sie es angezeigt haben. Wenn Sie definieren möchten, ob für bestimmte Benutzer ein Stylesheet hinzugefügt wird, könnten Rollen hilfreich sein. –

+0

Das ist eine gute Idee - ich könnte eine spezielle Rolle für dieses Stylesheet festlegen. Das ist es, danke! –