5

Chciałbym wiedzieć, jak mogę uzyskać obiekt User z Thymeleaf. Obecnie nazywam moją userService, która otrzyma użytkownika z DB. Nie podoba mi się to podejście, ponieważ dla każdego połączenia zostanie wykonane zapytanie db.Spring boot + thymeleaf: zaloguj się użytkownik

Czy można pobrać użytkownika z pamięci?

<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

masz dostęp do kapitału w "RequestMappingMethod" –

+0

Czy używasz niestandardowej usługi UserDetails? Jeśli tak, czy możesz podać swoją implementację? –

+0

Robert: tak, ale jego puste - Ma tylko metodę findUserByName, która zwraca wartość null –

Odpowiedz

3

Jeśli używasz zabezpieczenia sprężyny i thymeleaf, można sprawdzić: https://github.com/thymeleaf/thymeleaf-extras-springsecurity3
Na przykład:

<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

da ci tylko nazwę SecurityObject - to, czego potrzebuję, to inne pole z Obiektu użytkownika –

+0

Rozumiem @AlexTbk, jeśli potrzebujesz kompletny obiekt użytkownika jedną z opcji jest dodanie go do modelu lub dostęp do niego, tak jak pokazano. Jeśli chcesz zdefiniować, czy jakiś arkusz stylów został dodany dla określonego typu użytkowników, być może pomocne mogą okazać się role. –

+0

To dobry pomysł - mógłbym ustawić specjalną rolę dla tego arkusza stylów. To, dzięki! –