Как Spring Security управляет SecurityContext в потоке между запросами веб-приложения? - PullRequest
9 голосов
/ 24 августа 2011

В SpringSecurity у него есть имя класса SecurityContextHolder и его спецификация: «Связывает данный SecurityContext с текущим потоком выполнения». С веб-приложением, когда запрос приходит на сервер, Spring также перезагружает и устанавливает SecurityContext этого запроса в SecurityContextHolder для своего потока?

Ответы [ 2 ]

9 голосов
/ 26 августа 2011

Да, SecurityContextPersistenceFilter позаботится об этом.По умолчанию он находит SecurityContext в HttpSession и связывает его с потоком через SecurityContextHolder.Когда запрос завершает обработку, он делает обратное - он берет SecurityContext из потока и помещает его в сеанс.

Из Javadoc:

Заполняет SecurityContextHolder полученной информациейиз настроенного SecurityContextRepository до запроса и сохраняет его обратно в хранилище после завершения запроса и очистки держателя контекста.По умолчанию он использует HttpSessionSecurityContextRepository.

7 голосов
/ 24 августа 2011

С веб-приложением, когда запрос приходит на сервер, Spring также перезагружает и устанавливает SecurityContext этого запроса в SecurityContextHolder для своего потока?

В основном да.

По умолчанию SecurityContextHolder.getInstance() возвращает экземпляр SecurityContextHolder, который был сохранен как локальный для текущего потока. (Это только механизм по умолчанию. Вы можете использовать другую стратегию для определения местоположения SecurityContextHolder, вызывая SecurityContextHolder.setStrategemName())

Фильтры SpringSecurity гарантируют, что запрос SecurityContextHolder (как бы он ни находился) загружается с учетными данными запроса в начале и что держатель очищается в конце обработки запроса.

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