spring-security-oauth2(二十六) Spring Security授权源码解析

原理流程图 

spring-security-oauth2(二十六) Spring Security授权源码解析

spring security的基本原理之前讲解过了。这章主要看后面两个:

FilterSecurityInterceptor

决定该用户是否有权限访问指定的资源

ExceptionTranslationFilter

异常处理,如果不能访问,则处理FilterSecurityInterceptor中抛出的异常

AnonymousAuthenticationFilter

AnonymousAuthenticationFilter : 匿名过滤器,位置固定,前面所有的都走完之后,会经过该过滤器。

这个类就是给用户一个匿名用户及权限,如果用户没有认证。

spring-security-oauth2(二十六) Spring Security授权源码解析

 

授权控制

spring-security-oauth2(二十六) Spring Security授权源码解析

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

spring-security-oauth2(二十六) Spring Security授权源码解析

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

spring-security-oauth2(二十六) Spring Security授权源码解析

spring-security-oauth2(二十六) Spring Security授权源码解析

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

spring-security-oauth2(二十六) Spring Security授权源码解析

org.springframework.security.web.access.ExceptionTranslationFilter#doFilter 捕获异常处理

spring-security-oauth2(二十六) Spring Security授权源码解析源码就简单分析到这里,可以自己断点调试。