Spring Security验证流程剖析及自定义验证方法
Spring Security 本质上是一连串的 Filter , 然后又以一个独立的 Filter 的形式插入到 Filter Chain 里,其名为 FilterChainProxy 。实际上 FilterChainProxy 下面可以有多条 Filter Chain ,来针对不同的URL做验证,而 Filter Chain 中所拥有的 Filter 则会根据定义的服务自动增减。所以无需要显示再定义这些 Filter ,除非想要实现自己的逻辑。验证失败,抛出一个 AuthenticationException 异常。无法判断,返回 null 。Spring Security 将获取到的用户名和密码封装成一个 Authentication 接口的实现类,比如常用的 UsernamePasswordAuthenticationToken 。将上述产生的 Authentication 对象传递给 AuthenticationManager 的实现类 ProviderManager 进行认证。ProviderManager 依次调用各个 AuthenticationProvider 进行认证,认证成功后返回一个封装了用户权限等信息的 Authentication 对象。将 AuthenticationManager 返回的 Authentication 对象赋予给当前的 SecurityContext 。