• 【Spring Security 系列】(四)高层级组件


    前面两篇文章,我们已经把认证&授权功能的基础组件介绍了一遍,这里再来回顾一下:

    基础组件总结

    上文中提到的大部分都是接口,也就是 Spring Security 把各个问题都抽象成一个接口,可以自由的实现它,列举一下:

    • UserDetails – 用户信息抽象
    • GrantedAuthority – 权限信息抽象
    • UserDetailsService – 用户信息查询
    • PasswordEncoder – 密码加密与验证
    • AuthenticationSuccessHandler – 认证成功处理逻辑
    • AuthenticationFailureHandler – 认证失败处理逻辑
    • LogoutSuccessHandler – 登出成功处理逻辑
    • AccessDecisionVoter – 鉴权
    • AccessDeniedHandler – 权限不足处理逻辑
    • AuthenticationEntryPoint – 匿名访问处理逻辑

    还有三个Filter:

    • UsernamePasswordAuthenticationFilter – 登录接口,请求路径为 POST /login,请求字段为 usernamepassword
    • LogoutFilter – 登出接口,请求路径为 POST /logout
    • FilterSecurityInterceptor – 鉴权拦截器

    看起来说到这貌似可以完结了,UsernamePasswordAuthenticationFilter 直接就引用 UserDetailsService 和 PasswordEncoder 不就可以实现了用户认证吗?

    答:实现是实现了,但看起来有点像是硬编码了,扩展性堪忧。UserDetailsService+PasswordEncoder适用于自己系统管理账号密码的情况,那如果此时要同时接入别的认证系统,也就是支持多种认证方式,直接傻眼。
    之所以称为框架,就是它还考虑了各种各样的情形,看看 Spring Security 还藏了什么东西。

    更高层抽象

    上文提到的各个组件只是最底层的抽象而且是比较零散的,作为一个成熟的框架,势必会将各个组件有机的整合起来,提供更高层次的抽象。使得框架更易于使用且可以灵活扩展。
    来看看Spring Security做了哪些努力:

    1. Authentication
      身份验证的主体,会用于认证前的信息流转,也会用于承载认证后的认证主体信息(标记为已认证),认证后可通过 SecurityContextHolder.getContext().getAuthentication() 获取。内部会包含 UserDetails 和 GrantedAuthority。
    2. AuthenticationProvider
      认证提供者,用于执行特定类型的身份验证。内置实现有 DaoAuthenticationProvider,内部引用了 UserDetailsService 和 PasswordEncoder,用于支持用户名/密码的身份验证。
    3. AuthenticationManager
      认证管理者,认证逻辑对外暴露的高层接口。内置实现有 ProviderManager,内部可引用多个 AuthenticationProvider,支持多种认证实现。
    4. AccessDecisionManager
      鉴权管理者,鉴权逻辑对外暴露的高层接口。内置实现有 AffirmativeBased,内部可引用多个 AccessDecisionVoter,支持多种鉴权实现。

    end

  • 相关阅读:
    HarmonyOS应用开发:鸿蒙自定义组件slot插槽,体现的更强大!
    FFmpeg横竖版视频互换背景模糊一键生成
    利用Anaconda 在Pycharm安装模组比如serial@问题No module named ‘serial.tools‘
    DASCTF X CBCTF 2023|无畏者先行
    华为云云耀云服务器L实例评测 | 购买流程及使用教程
    ansible中waring处理方式
    AWS API gateway api CORS错误处理方法
    Navicat连接openGauss数据库报错
    数学建模之Matlab基础操作
    《C++》动态内存管理
  • 原文地址:https://blog.csdn.net/qq_31772441/article/details/126237976