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

Содержимое удалено Содержимое добавлено
Строка 150:
 
== Установка содержимого SecurityContextHolder напрямую ==
На самом деле Spring Security не задумывается о том, каким образом объект <code>Authentication</code> попадет внутрь <code>SecurityContextHolder</code>. Существует только одно критическиекритическое требование, оно состоит в том что <code>SecurityContextHolder</code> должен содержать в себе объект <code>Authentication</code>, который представляет принципала до того момента как <code>AbstractSecurityInterceptor</code> (чуть позже, мы рассмотрим его подробней) потребуется авторизовать пользовательскую операцию.
 
Вы можете (и многие пользователи так и делают) написать собственные фильтры или MVC контроллеры для обеспечения взаимодействия с системами аутентификации, которые не основаны на Spring Security. Например, вы могли бы использовать Container-Managed аутентификацию, которая получает текущего пользователя из <code>ThreadLocal</code> или JNDI. Или вы можете работать на компанию, которая имеет собственную унаследованную систему аутентификации, которая является корпоративным "стандартом" и над которой у вас мало контроля. В таких ситуациях очень легко «запрячь» Spring Security в работу, и использовать старую систему аутентификации. Все что нужно сделать, это написать фильтр (или его эквивалент), который считывает информацию о пользователях из нужного места, строить Spring Security объект <code>Authentication</code> и помещает его в <code>SecurityContextHolder</code>.