我向Spring Security 3.0.5提出了一个问题。
使用Spring Security保护Web应用程序时,“UserDetails” - 对象始终是否存在?我的意思是,使用Spring Security的每种应用程序(甚至在其他系统如LDAP或X.509或CAS中)是否也提供“UserDetails” - 对象?
此外,如果是,那么每个应用程序是否都有UserDetailsService?
那么,阅读Spring Security文档我不这么认为,但我读到核心组件总是存在(SecurityContextHolder,SecurityContext,Authentication)。如果是这样,那么Authentication对象有什么意义,如果它不包含UserDetails-Object?
谢谢!
答案 0 :(得分:2)
简短回答是否定。不同类型的身份验证机制可以使用不同类型的Authentications。
但是,许多机制都使用UsernamePasswordAuthenticationToken,它具有对UserDetails对象的引用。例如:UsernamePasswordAuthenticationFilter + DaoAuthenticationProvider。还有UsernamePasswordFilter + LdapAuthenticationProvider。
但是:只有DaoAuthenticationProviders使用UserDetailsService。
实际上,如果您使用Web表单要求用户输入用户名/密码,您可能最终会使用UsernamePasswordAuthenticationToken,从而使用UserDetails。但是,如果您使用的是DaoAuthenticationProvider,则只能使用UserDetailsService。