Spring Security/Технический обзор Spring Security: различия между версиями

Содержимое удалено Содержимое добавлено
Отмена правки 83167, сделанной мной
Строка 17:
Самым фундаментальным явлется <code>SecurityContextHolder</code>. В нем мы храним информацию о текущем контексте безопасности приложения, который включает в себя подробную информацию о доверителе (принципале/пользователе) работающем в настоящее время с приложением. По умолчанию <code>SecurityContextHolder</code> использует <code>ThreadLocal</code> для хранения такой информации, что означает, что контекст безопасности всегда доступен для методов исполняющихся в том же самом потоке, даже если контекст безопасности явно не передается в качестве аргумента этих методов. Использование <code>ThreadLocal</code> таким образом, вполне безопасно, если принимаются меры для очистки потока после завершения обработки запроса текущего доверителя. Естественно Spring Security делает это за вас автоматически, поэтому нет необходимости беспокоиться об этом.
 
В некоторых приложениях использование <code>ThreadLocal</code> не является удачным решением, в силу их специфики работы с потоками. Например, клиент Swing может захотеть чтобы все потоки Java-машины использовали один и тот же контекст безопасности. <code>SecurityContextHolder</code> может быть настроен во время запуска с помощью специальной стратегии, чтобы вы могли определить как будет храниться контекст безопасности. Для одиночного приложения вы можете использовать стратегию <code>SecurityContextHolder.MODE_GLOBAL</code>. Другие приложения могут захотеть иметь потоки, порожденные от одного защищенного потока, предполагая наличие аналогичной безопасности. Это достигается путем использования <code>SecurityContextHolder.MODE_INHERITABLETHREADLOCAL</code>. Вы можете изменить режим по умолчанию <code>SecurityContextHolder.MODE_THREADLOCAL</code> двумя способами. Первый, установить соответствующее свойство системы, второй, вызоватьвызвать статический метод класса <code>SecurityContextHolder</code>. Большинству приложений не требуется менять значение по умолчанию, в противном случае, чтобы узнать больше, изучите Javadocs для <code>SecurityContextHolder</code>.
 
=== Получение информации о текущем пользователе ===