Мы используем Spring Framework и Spring Security 3.0.x, как мы узнаем, вошел ли текущий посетитель в систему и какое у него имя пользователя? У меня всегда был следующий код:
public static String getUsername() {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal == null)
return null;
if (principal instanceof String)
return (String) principal;
if (principal instanceof User)
return ((User) principal).getUsername();
return null;
}
Причина instanceof
s в прошлом, иногда getPrincipal ()
возвращала String
, а иногда a Пользователь
...
Поэтому я бы просто проверил, вернул ли getUsername ()
null
, чтобы узнать, вошел ли в систему текущий посетитель. Однако что-то изменилось в наших библиотеках Spring при недавнем обновлении некоторых компонентов. Теперь, если пользователь не вошел в систему, getPrincipal ()
возвращает String
«anonymousUser».
В дальнейшем, каким правильным способом я должен проверять наличие посетитель вошел в систему и какое у него имя пользователя?