Как получить идентификатор текущего входа в Spring - PullRequest
0 голосов
/ 21 октября 2019

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

Но мне нужно связать эту информацию с идентификатором из таблицы пользователя. Как я могу получить идентификатор текущего пользователя?

Ответы [ 3 ]

1 голос
/ 21 октября 2019

Итак, при условии, что ваш конец пружинного предохранителя работает правильно, у вас есть три варианта, я думаю, один из них:

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
  String username = ((UserDetails)principal).getUsername();
} else {
  String username = principal.toString();
}

Другой, который я считаю более чистым, так как не требуется литье:

 @RequestMapping(value = "/username", method = RequestMethod.GET)
  @ResponseBody
  public String currentUserName(Authentication authentication) {
     return authentication.getName();
  }
}

Еще один вариант:

 @RequestMapping(value = "/username", method = RequestMethod.GET)
  @ResponseBody
  public String currentUserName(Principal principal) {
     return principal.getName();
  }

Вот хорошее объяснение https://dzone.com/articles/how-to-get-current-logged-in-username-in-spring-se

0 голосов
/ 21 октября 2019

Это описано в Spring Security Documentation: https://docs.spring.io/spring-security/site/docs/5.2.0.RELEASE/reference/htmlsingle/#community-source, Раздел Obtaining information about the current user

Получение информации о текущем пользователе. Внутри SecurityContextHolder мы храним сведения о главном, который в данный момент взаимодействует с приложением. Spring Security использует объект аутентификации для представления этой информации. Обычно вам не нужно создавать объект Authentication самостоятельно, но пользователи довольно часто запрашивают объект Authentication. Вы можете использовать следующий блок кода - из любого места в вашем приложении - для получения имени аутентифицированного в данный момент пользователя, например:

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

if (principal instanceof UserDetails) {
String username = ((UserDetails)principal).getUsername();
} else {
String username = principal.toString();
}

Объект, возвращаемый вызовом getContext (), является экземпляроминтерфейс SecurityContext. Это объект, который хранится в локальном потоке. Как мы увидим ниже, большинство механизмов аутентификации в Spring Security возвращают экземпляр UserDetails в качестве принципала.

0 голосов
/ 21 октября 2019

Вот 2 способа:

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

Это дает вам зарегистрированный в данный момент пользовательский объект Principal для Spring.

От того, что вам нужно сделать, зависит.

Принципал может быть объектом UserDetails, или он может быть строкой или (маловероятно) чем-то другим.

Если у вас есть конечная точка, в которую вы хотите внедрить ее, добавьте ее какпараметр вашего метода, и Spring установит его для вас:

  @RequestMapping(value = "/my-user-info", method = RequestMethod.GET)
  @ResponseBody
  public String currentUserName(Principal p) {
     String name = p.getName();
     ...
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...