Сохранение пользовательской информации в сеансе, Spring Security - PullRequest
1 голос
/ 18 июня 2020

Мне было интересно, можно ли сохранить информацию о вошедшем в систему пользователе (имя пользователя, имя, фамилия, роли) в сеансе, чтобы я мог получить ее в любом месте программы, не выполняя поиск в базе данных?

В настоящее время я делаю это в большинстве своих методов, чтобы получить всю необходимую информацию:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
UsersModel senderUser = userRepository.findByusername(userDetails.getUsername());   

Однако я бы не хотел каждый раз выполнять поиск в базе данных для получения информации о пользователе.

1 Ответ

1 голос
/ 18 июня 2020

https://www.baeldung.com/spring-security-authentication-with-a-database

  1. Создайте класс, реализующий UserDetails, и в этом примере это MyUserPrincipal, и сделайте так, чтобы он имел все basi c информация, которая вам нужна.
  2. Затем вы можете передать ее своему классу и получить информацию. (MyUserPrincipal userDetails = (MyUserPrincipal) authentication.getPrincipal();

Примечание:

За кулисами Spring использует HttpSessionSecurityContextRepository для сохранения SecurityContext в сеансе http и восстановления его по каждому запросу. 1021 * теперь хранится в контексте безопасности, вы фактически косвенно сохраняете его в сеансе. Но по какой-либо причине вы хотите сохранить его http-сеанс напрямую, вы можете получить его из контекста безопасности и сохранить.

...