原理流程图
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 捕获异常处理
源码就简单分析到这里,可以自己断点调试。