5

Я хотел бы знать, как я могу получить объект User из Thymeleaf. В настоящее время я вызываю свой userService, который получит пользователя из БД. Мне не нравится этот подход, потому что для каждого вызова будет выполнен запрос db.Spring boot + thymeleaf: войти в систему пользователя

Возможно ли получить пользователя из памяти?

<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

у вас есть доступ к принципалу в 'RequestMappingMethod' –

+0

Вы используете пользовательский UserDetailsService? Если да, можете ли вы предоставить свою реализацию? –

+0

Роберт: да, но его пустой. Он имеет только метод findUserByName, который возвращает null. –

ответ

3

Если вы используете пружинный безопасности и thymeleaf, вы можете проверить: https://github.com/thymeleaf/thymeleaf-extras-springsecurity3
Например:

<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

предоставит вам только имя SecurityObject. Мне нужно другое поле из объекта пользователя. –

+0

. Я понимаю @AlexTbk, если вам нужно полный объект User Object - это добавить его в модель или вы также можете получить к нему доступ, как вы показали. Если вам нужно определить, добавлена ​​ли какая-либо таблица стилей для определенного типа пользователей, возможно, роли могут помочь. –

+0

Это хорошая идея - я мог бы установить особую роль для этой таблицы стилей. Вот оно, спасибо! –

Смежные вопросы