3. Spring Security 结构

总览

Spring Security 通过Filter来实现对web资源的访问控制

在这里插入图片描述
Spring 通过某些方式将DelegatingFilterProxy作为Filter注册给Servlet容器, 执行doFilter方法时委派给从spring容器中获取的FilterChainProxy处理(FilterChainProxy在配置类WebSecurityConfiguration中注入到spring容器中)。

FilterChainProxy仅是一个代理,真正提供认证和授权这些功能的是FilterChainProxySecurityFilterChain包含的各个Filter(这些Filter已经注入到了Spring容器中)。这些Filter也不负责具体逻辑,认证和授权的具体逻辑交由认证管理器AuthenticationManager和决策管理器AccessDecisionManager处理。

Spring Security的功能实现主要由一系列过滤器链配合完成,项目启动时日志会打印Spring Security用到的Filter。

SecurityFilterChain中的Filter

  • SecurityContextPersistenceFilter:它在SecurityFilterChain中的顺序比较靠前,主要负责处理SecurityContextHolder

  • UsernamePasswordAuthenticationFilter:用于处理用户名密码这种方式的认证

    认证成功后会发布InteractiveAuthenticationSuccessEvent事件,并且交由AuthenticationSuccessHandler处理
    认证失败会交由AuthenticationFailureHandler处理,可自定义

    在这里插入图片描述

  • FilterSecurityIntercepter:用于权限校验,使用AccessDecisionManager授权访问
    在这里插入图片描述

  • ExceptionTranslationFilter: 捕获FilterChain的所有的异常,只处理AuthenticationException和AccessDeniedException两种类型的异常,其他异常继续抛出
    在这里插入图片描述

认证管理器AuthenticationManager
决策管理器AccessDecisionManager

认证

在这里插入图片描述

可向spring容器中注入自定义的UserDetailsService、PasswordEncoder实现自己的逻辑

授权

在这里插入图片描述

决策流程

spring security 内置了三个基于投票的实现类,分别是在这里插入图片描述
AffirmativeBased 是Spring Security默认使用的投票方式(只要有一个投票通过,就表示通过)

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值