2011-05-20 61 views
0

我对Spring Security 3.0.5有个问题。Spring Security:UserDetails和UserDetailsS​​ervice是否存在于使用Spring Security的每种应用程序中?

当使用Spring Security来保护Web应用程序时,是否存在一个“UserDetails” - 对象总是?我的意思是,使用Spring Security的每种应用程序(即使在LDAP或X.509或CAS等其他系统中)是否也提供了“UserDetails”对象?

此外,如果是,每个应用程序都有一个UserDetailsS​​ervice?我不这么认为,但是我读到核心组件始终存在(SecurityContextHolder,SecurityContext,Authentication)。如果是这样,Authentication对象具有什么意义,如果它不包含UserDetails-Object?

谢谢!

回答

2

简短的回答是否定的。不同类型的认证机制可以使用不同类型的Authentications

但是,许多机制确实使用了具有对UserDetails对象的引用的UsernamePasswordAuthenticationToken。例如:UsernamePasswordAuthenticationFilter + DaoAuthenticationProvider。也是UsernamePasswordFilter + LdapAuthenticationProvider。

但是:只有DaoAuthenticationProviders使用UserDetailsS​​ervice。

实际上,如果您要求用户使用Web表单输入用户名/密码,那么您最终可能会使用UsernamePasswordAuthenticationToken并因此使用UserDetails。但是如果您使用的是DaoAuthenticationProvider,则只会使用UserDetailsS​​ervice。

+0

谢谢!但SecurityContextHolder,SecurityContext和Authentication如何呢?必须始终使用这些对象,他们呢? – nano7 2011-05-20 14:32:01

+1

SecurityContext具有对仅作为接口的身份验证的引用。 UsernamePasswordAuthenticatonToken具有对UserDetails的引用,是一种身份验证,但也可能有其他类型(请参阅用于身份验证的Javadoc)。 – sourcedelica 2011-05-20 18:37:40

+0

谢谢。我知道其他类型的身份验证是可能的。我只是想知道,每一个由spring安全保护的应用程序是否有SecurityContextHolder,SecurityContext和Authentication-Objects(无论什么类型的令牌对我来说都不重要,它们都代表校长,不是吗?)。这三个对象被称为“核心”组件,这就是为什么我想知道它! :-) – nano7 2011-05-25 09:37:59

相关问题