springsecurity第一章简单入门理解——springsecurity的大体认证过程
个人学习spring security的心得:要入门这个框架首先要大体了解它的认证过程,而这个认证过程就是使用spring security的各种Filter(过滤器)来完成。
大多数的spring security的学习文档都会有这样一张认证流程图:
当客户端一个请求来到的时候,它会被AbstractAuthenticationProcessingFilter拦截(这个Filter是在基于 web 的认证请求中使用的。 处理包含 认证信息的请求,如 认证信息可能是 form POST提交的、 SSO 信息或者其他用户提供的),然后它检验到你是一个认证请求,所以它会分发给处理认证请求的过滤器UsernamePasswordAuthenticationFilter来处理,如果认证成功,它会返回一个认证成功的用户实体类和这个用户实体类所拥有的权限信息的凭证。
再来看看在UsernamePasswordAuthenticationFilter这里是怎么处理这个请求的?
图1可以看到,它会交给一个叫做认证管理者AuthenticationManager来处理,其实这里就是认证中心,它拥有各种类和接口来处理这些认证请求,它会交给一个叫AuthenticationProvider的实现类来处理。
这时要结合图2来分析:UsernamePasswordAuthenticationFilter会请求参数创建一个叫UsernamePasswordAuthenticationToken的凭证传递给AuthenticationManager认证中心——>再到AuthenticationProvider的实现类(图2用的是DaoAuthenticationProvider)。这时Provider拿到这个凭证就会去应用的内存中去匹配,如果匹配正确就返回这个认证实体(用户)的详细信息和用户权限。(这里的图用的是去内存中匹配,因为我们实际中的信息都会存到数据库,道理是一样的,如果存在数据库,那么就去数据库中去匹配,因为去内存还是去数据库是可配置的,以后会有讲到)。
认证成功后,返回的认证实体和用户权限信息,会封装成一个AuthenticationToken凭证,而系统应用返回到客户端用户的session里面会包含着这个Token,客户端拿着这个凭证之后,就可以访问其它权限范围内的资源了。
一个简略的spring security认证过程就是这样了,其中的细节,在以后的章节中会慢慢的深入了解到。