#spring #spring-security
#spring #spring-security
Вопрос:
У меня вопрос к Spring Security 3.0.5.
При использовании Spring Security для защиты веб-приложения, всегда ли существует объект «UserDetails»? Я имею в виду, предоставляет ли каждый тип приложений (даже в других системах, таких как LDAP или X.509 или CAS), использующих Spring Security, также объект «UserDetails»?
Кроме того, если да, то есть ли у каждого приложения UserDetailsService?
Ну, читая документацию Spring Security, я так не думаю, но я читал, что основные компоненты всегда существуют (SecurityContextHolder, SecurityContext, Аутентификация). Если да, то какой смысл имеет объект аутентификации, если он не содержит UserDetails-Object?
Спасибо!
Ответ №1:
Короткий ответ — нет. Различные типы механизмов аутентификации могут использовать разные типы аутентификаций.
Однако многие механизмы используют UsernamePasswordAuthenticationToken, который имеет ссылку на объект UserDetails. Например: UsernamePasswordAuthenticationFilter DaoAuthenticationProvider. Также UsernamePasswordFilter LdapAuthenticationProvider.
Но: только DaoAuthenticationProviders используют UserDetailsService.
На практике, если вы запрашиваете у пользователя имя пользователя / пароль с помощью веб-формы, вы, вероятно, в конечном итоге используете UsernamePasswordAuthenticationToken и, следовательно, UserDetails. Но вы будете использовать UserDetailsService только в том случае, если используете DaoAuthenticationProvider.
Комментарии:
1. Спасибо! но как насчет SecurityContextHolder, SecurityContext и аутентификации? Эти объекты всегда должны использоваться, не так ли?
2. SecurityContext имеет ссылку на аутентификацию, которая является просто интерфейсом. UsernamePasswordAuthenticatonToken, который имеет ссылку на пользовательские данные, является типом аутентификации, но возможны и другие типы (см. Javadoc для аутентификации).
3. Спасибо. Я знаю, что возможны другие типы аутентификации. Я просто хотел знать, есть ли у каждого приложения, защищенного spring security, SecurityContextHolder, SecurityContext и Authentication-Objects (какой бы токен это ни был, для меня не имеет значения, все они представляют принципала, не так ли?). Эти три объекта описаны как «основные» компоненты, вот почему я хотел бы это знать! 🙂
4. Да, они всегда присутствуют, но пользовательские данные / UserDetailsService — нет.