Как узнать, вошел ли текущий веб-посетитель в Spring Security 3.0 - PullRequest
6 голосов
/ 28 апреля 2011

Мы используем 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, а иногда User ...

Так что я бы просто проверил, вернул ли getUsername() null, чтобы увидеть, вошел ли в систему текущий посетитель. Однако что-то изменилось в наших библиотеках Spring при обновлении некоторых компонентов недавно. Теперь, если пользователь не вошел в систему, getPrincipal() возвращает String "anonymousUser".

В дальнейшем, каким образом я должен проверять, вошел ли посетитель в систему и какое у него имя пользователя?

1 Ответ

4 голосов
/ 28 апреля 2011

Правильный способ получить пользователя, вошедшего в систему, задокументирован здесь , что в основном соответствует приведенному выше коду.

Похоже, у вас может быть настроена аутентификация anonymous для вашегосайт, поэтому принципал возвращает anonymousUser.

...