Получить вошедшего в систему пользователя в Spring Security

Чтобы получить вошедшего в систему пользователя в Spring Security, вы можете использовать различные методы. Вот несколько примеров:

  1. Использование SecurityContextHolder: Spring Security предоставляет класс SecurityContextHolder, который содержит контекст безопасности приложения. Вы можете использовать метод getContext() для получения SecurityContext, а затем извлечь из него аутентифицированного пользователя. Вот пример:
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
// Retrieve logged-in user
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.getPrincipal() instanceof UserDetails) {
    UserDetails userDetails = (UserDetails) authentication.getPrincipal();
    String username = userDetails.getUsername();
    // Use the username as needed
}
  1. Использование @AuthenticationPrincipal: Spring Security предоставляет аннотацию @AuthenticationPrincipal, которую можно использовать для прямого внедрения принципала (вошедшего в систему пользователя) в метод контроллера или компонент. Вот пример:
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
// Inject logged-in user
@GetMapping("/user")
public String getUserInfo(@AuthenticationPrincipal UserDetails userDetails) {
    String username = userDetails.getUsername();
    // Use the username as needed
    return "User: " + username;
}
  1. Использование SecurityContextAccessor: Если вам нужен доступ к вошедшему в систему пользователю за пределами контроллера или компонента, вы можете использовать интерфейс SecurityContextAccessor. Этот подход позволяет вам получить доступ к текущему SecurityContext и получить информацию аутентификации. Вот пример:
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextAccessor;
import org.springframework.security.core.userdetails.UserDetails;
@Autowired
private SecurityContextAccessor securityContextAccessor;
// Retrieve logged-in user
Authentication authentication = securityContextAccessor.getAuthentication();
if (authentication != null && authentication.getPrincipal() instanceof UserDetails) {
    UserDetails userDetails = (UserDetails) authentication.getPrincipal();
    String username = userDetails.getUsername();
    // Use the username as needed
}

Это некоторые методы, которые вы можете использовать для получения вошедшего в систему пользователя в Spring Security. Выбор подходящего метода зависит от вашего конкретного случая использования и того, где вам нужен доступ к информации о пользователе.