Что такое "главный" в весенней безопасности?

Я действительно новичок в Spring и Spring Security. Я читал о Spring Security, и в нем вышла концепция принципала, которая должна быть текущим зарегистрированным пользователем. Но что, если у нас есть более одного зарегистрированного пользователя? Итак, мой вопрос заключается в том, что именно тогда главное в весенней безопасности?

Я читал, например, этот учебник:

http://www.mkyong.com/spring-security/get-current-logged-in-username-in-spring-security/

и они, похоже, учитывают, что существует только один текущий зарегистрированный пользователь, что не так часто бывает.

Как получить конкретный пользователь? И как я могу различать пользователей, которые делают запросы?

Ответ 1

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

SecurityContextHolder.getContext() внутренне получает текущую реализацию SecurityContext через переменную ThreadLocal. Поскольку запрос привязан к одному потоку, вы получите контекст текущего запроса.

Чтобы упростить, вы можете сказать, что контекст безопасности находится в сеансе и содержит пользователя/главную роль и роли/полномочия.

Как получить конкретный пользователь?

Вы этого не сделаете. Все API-интерфейсы предназначены для доступа к пользователю и сеансу текущего запроса. Пусть пользователь A является одним из 100 пользователей, прошедших проверку подлинности. Если A выдает запрос на ваш сервер, он будет выделять один поток для обработки этого запроса. Если вы затем выполните SecurityContextHolder.getContext().getAuthentication() вы делаете это в контексте этого потока. По умолчанию из этого потока вы не имеете доступа к контексту пользователя B, который обрабатывается другим потоком.

И как я могу различать пользователей, которые делают запросы?

Вам не обязательно, что контейнер Servlet делает для вас.