Spring Security:UserDetails 和 UserDetailsService 是否存在于使用 Spring Security 的每种应用程序中?
我有一个关于 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,它有什么意义?
谢谢你!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简短的答案是否定的。不同类型的身份验证机制可以使用不同类型的 身份验证。
但是,许多机制确实使用 UsernamePasswordAuthenticationToken,它具有对 UserDetails 对象的引用。例如:用户名密码验证过滤器+DaoAuthenticationProvider。还有用户名密码过滤器+LdapAuthenticationProvider。
但是:只有 DaoAuthenticationProviders 使用 UserDetailsService。
实际上,如果您使用 Web 表单向用户询问用户名/密码,您最终可能会使用 UsernamePasswordAuthenticationToken 以及 UserDetails。但如果您使用 DaoAuthenticationProvider,则仅会使用 UserDetailsService。
The short answer is No. Different types of authentication mechanisms can use different types of Authentications.
However, many of the mechanisms do use the UsernamePasswordAuthenticationToken which has a reference to a UserDetails object. For example: UsernamePasswordAuthenticationFilter+DaoAuthenticationProvider. Also UsernamePasswordFilter+LdapAuthenticationProvider.
But: only DaoAuthenticationProviders use a UserDetailsService.
In practice, if you are asking the user for a username/password using a web form you will probably end up using a UsernamePasswordAuthenticationToken and hence a UserDetails. But you will only use a UserDetailsService if you are using a DaoAuthenticationProvider.