Spring Security核心组件

作者: 李亚楠0219 | 来源:发表于2017-06-14 17:12 被阅读261次
    • SecurityContextHolder、SecurityContext and Authentication Objects
    • UserDetailsService
    • GrantedAuthority

    SecurityContextHolder、SecurityContext、Authentication

    SecurityContextHolder是最基础的核心组件,它内部存储着当前用户的基本信息。默认情况下,使用ThreadLocal来保存这些信息。

    获取当前用户信息

    Spring Security在SecurityContextHolder中存储当前用户的信息(Authentication对象),获取当前用户信息也就是要获取Authentication对象,在应用的任何地方,都可以使用如下代码获取当前用户名:

    Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    if (principal instanceof UserDetails) {
        String username = ((UserDetails)principal).getUsername();
    } else {
        String username = principal.toString();
    }
    

    UserDetailsService

    • 从上述代码中,我们知道,可以从Authentication获取用户信息,用户其实就是一个Object,它可以被强制转换为UserDetails。
    • UserDetails是Spring Security的一个核心接口,他能代表一个当前用户。
    • 可以将UserDetails当作是从数据库中的用户表到SecurityContextHolder中的用户信息的一个适配接口。

    那么,我们如何为Spring Security提供UserDetails信息?
    答案是实现UserDetailsService接口。接口函数:UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;

    GrantedAuthority

    除了用户信息,Authentication还可提供权限信息(使用GrantedAuthority来描述),使用getAuthorities()函数获取GrantedAuthority对象。

    总结

    • SecurityContextHolder:从SecurityContextHolder可获取SecurityContext。
    • SecurityContext:包含Authentication信息。
    • Authentication:包含用户和权限信息。
    • GrantedAuthority:包含权限信息。
    • UserDetails:包含用户信息。
    • UserDetailsService:用户输入账号密码后创建UserDetails。

    相关文章

      网友评论

        本文标题:Spring Security核心组件

        本文链接:https://www.haomeiwen.com/subject/gqisqxtx.html