spring security principal credentials authorities details authenticated

spring security在进行认证时,会将用户名和密码封装成一个Authentication对象,在进行认证后,会将Authentication的权限等信息填充完全返回。Authentication会被存在SecurityContext中,供应用之后的授权等操作使用。此处介绍下Authentication,Authentication存储的就是访问应用的用户的一些信息。下面是Authentication源码:

public interface Authentication extends Principal, Serializable {
    //用户的权限集合
    Collection<? extends GrantedAuthority> getAuthorities();

    //用户登录的凭证,一般指的就是密码
    Object getCredentials();

    //用户的一些额外的详细信息,一般不用
    Object getDetails();

    //这里认为Principal就为登录的用户
    Object getPrincipal();

    //是否已经被认证了
    boolean isAuthenticated();

    //设置认证的状态
    void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException;
}

讲解了Authentication后,我们回过头来再看attemptAuthentication方法,该方法会调用AuthenticationManager的authenticate方法进行认证并返回一个填充完整的Authentication对象。

  在这里我们又要讲解一下认证的几个核心的类,很重要!

    a). AuthenticationManager  b).ProviderManager  c).AuthenticationProvider  d).UserDetailsService  e).UserDetails

  现在来说一下这几个类的作用以及关联关系。

    a). AuthenticationManager是一个接口,提供了authenticate方法用于认证。

    b). AuthenticationManager有一个默认的实现ProviderManager,其实现了authenticate方法。

    c). ProviderManager内部维护了一个存有AuthenticationProvider的集合,ProviderManager实现的authenticate方法再调用这些AuthenticationProvider的authenticate方法去认证,表单提交默认用的AuthenticationProvider实现是DaoAuthenticationProvider。

    d). AuthenticationProvider中维护了UserDetailsService,我们使用内存中的用户,默认的实现是InMemoryUserDetailsManager。UserDetailsService用来查询用户的详细信息,该详细信息就是UserDetails。UserDetails的默认实现是User。查询出来UserDetails后再对用户输入的密码进行校验。校验成功则将UserDetails中的信息填充进Authentication中返回。校验失败则提醒用户密码错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值