Spring Security工作原理
在了解了Security几个核心类的概念之后,我们梳理一下Security的工作原理。
本文将要分析的几个问题
security的工作流程,security的几个核心过滤器的功能,即什么时候把Authentication与线程绑定,什么时候进行认证,什么时候将Authentication与session关联,什么时候将Authentication改变更新到session,什么时候进行权鉴,没有认证信息及权限的时候是如何处理的。
过滤器认证的抽象过程
过滤器使用AuthenticationManager进行认证,AuthenticationManager即认证管理器,通常使用的是ProviderManger。ProviderManger里面有很多的Provider,比如DaoAuthenticationProvider,他们对用户信息进行认证,以DaoAuthenticationProvider的实现为例,它会用userDetailsService根据用户名加载出数据库内实际的用户信息,然后和用户提交的用户信息(被过滤器封装为Authentication,只包含了用户及密码)对比。如果对比成功,则会将数据库里的其他用户信息如权限等其他信息一起封装到Authentication中,最后由过滤器将该Authentication设置到context中。
工作流程
Filter我们都很熟悉了,其实security就是基于FIlter实现的,它的关键类FilterChainProxy的就是一个Filter。
带Security鉴权框架的系统整体过滤流程如下: