原理流程图

spring security的基本原理之前讲解过了。这章主要看后面两个:
FilterSecurityInterceptor
决定该用户是否有权限访问指定的资源
ExceptionTranslationFilter
异常处理,如果不能访问,则处理FilterSecurityInterceptor中抛出的异常
AnonymousAuthenticationFilter
AnonymousAuthenticationFilter : 匿名过滤器,位置固定,前面所有的都走完之后,会经过该过滤器。
这个类就是给用户一个匿名用户及权限,如果用户没有认证。

授权控制

FilterSecurityInterceptor(入口)
AccessDecisionManager 管理什么呢? AccessDecisionVoter :投票者
就是用来一系列的判定,是否可以进行访问什么的
AffirmativeBased: 只要有一票通过就通过(默认)
ConsensusBased :通过/不通过 哪一个票数多就遵循哪一个
UnanimousBased :只要有一票否决则不允许访问
AccessDecisionVoter 投票者 spring3-,由一堆实现类来解决
WebExpressionVoter: spring3+ 由该类全部包办,它投过就过,不过就不过(spring表达式)
SecurityConfig 所有的配置信息
ConfigAttribute 对应了每一个url的配置信息
SecurityContextHolder
Authentication 用户身份信息,用户拥有的权限信息
主流程:拿到 配置信息,用户身份信息,请求信息 然后给投票者进行投票;最后根据策略进行决定是否放行
未登录访问被拦截
结合上面的流程原理
访问:http://localhost:8060/user/1 进行断点调试
org.springframework.security.web.access.intercept.FilterSecurityInterceptor#doFilter

org.springframework.security.access.intercept.AbstractSecurityInterceptor#beforeInvocation


org.springframework.security.access.vote.AffirmativeBased#decide 默认实现

org.springframework.security.web.access.ExceptionTranslationFilter#doFilter 捕获异常处理
源码就简单分析到这里,可以自己断点调试。
本文深入剖析Spring Security的授权控制流程,详细解读FilterSecurityInterceptor、ExceptionTranslationFilter等组件的作用,以及AccessDecisionManager如何通过投票机制决定用户访问权限。
1314

被折叠的 条评论
为什么被折叠?



