Spring Security身份验证和用户界面

时间:2020-07-14 17:24:43

标签: spring spring-security

根据Spring Security,如果认证是由外部认证提供者完成的,则使用认证提供者。身份验证后,Spring Security将获得一个Authentication对象,该对象封装了用户信息。

如果Spring Security框架进行身份验证,则用户信息将封装在User接口的实例中(例如,UserDetails类是默认实现)。

我的问题是-为什么Spring Security框架不能使用一致的方法?为什么他们在所有情况下都不能使用UserDetails代替Authentication对象?有什么理由吗?

1 个答案:

答案 0 :(得分:1)

根据Spring文档

public interface Authentication extends Principal, Serializable

代表已通过AuthenticationManager.authenticate(Authentication)方法处理了请求的身份验证请求或已验证主体的令牌。 一旦对请求进行身份验证,身份验证通常将通过使用的身份验证机制存储在由SecurityContextHolder管理的线程本地SecurityContext中。通过创建Authentication实例并使用以下代码,无需使用Spring Security的一种身份验证机制即可实现显式身份验证:

 SecurityContextHolder.getContext().setAuthentication(anAuthentication);

有关更多详细信息,请参见https://docs.spring.io/spring-security/site/docs/4.2.15.RELEASE/apidocs/org/springframework/security/core/Authentication.html

说明:

仅当使用有效凭据对用户进行身份验证时,身份验证对象才会设置为本地安全上下文。它充当令牌。在类似UserDetails的情况下,我们无法知道用户是否已通过身份验证。

您还可以将其视为单一职责原则,其中UserDetails类的职责是管理用户详细信息,身份验证职责是处理真实性。