У меня есть несколько вопросов о Spring Security 3.0.5 и SecurityContext. Прежде всего, я попытаюсь сделать вывод, что я знаю:
- SecurityContextХолдер хранит SecurityContext
- Между запросами, SecurityContext хранится в HttpSession
- Начало запроса: SecurityContextHolder получает SecurityContext от HttpSession
Конец запроса: SecurityContextHolder помещает SecurityContext в HttpSession
Во время запроса на сервере SecurityContextHolder использует ThreadLocal. Везде в приложении (один и тот же запрос) к SecurityContext можно получить доступ
Теперь мой вопрос ....
-> Два запроса: экземпляр SecurityContext будет совместно использоваться
Как это работает? Я имею в виду, что SecurityContextHolder использует ThreadLocal для каждого запроса.
2 запроса = 2 ThreadLocals
Каждый запрос выполняет: getSessionAttribute (SecurityContext) из HttpSession
Что произойдет, если они будут работать с SecurityContext? Изменен ли SecurityContext во всех ThreadLocals?
Насколько я знаю: да (??)
Как это работает? Как они могут работать на одном экземпляре? Я имею в виду, я действительно не могу представить, как два разных потока с двумя разными ThreadLocals могут работать на одном экземпляре?
API (ThreadLocal):
Этот класс предоставляет локальные переменные потока. Эти переменные отличаются от своих обычных аналогов тем, что каждый поток, который обращается к одному (через свой метод get или set), имеет свою собственную, независимо инициализированную копию переменной.
Я имею в виду, вот оно: копировать! может быть, я ошибаюсь, и невозможно, чтобы два потока работали на одном и том же SecurityContext? Но Spring Security Documentation говорит об этом!
Было бы здорово, если бы кто-то мог мне это объяснить :-) Спасибо!