浅析Spring Security登录验证流程源码
一、登录认证基于过滤器链 Spring Security的登录验证流程核心就是过滤器链。当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问API接口了。 SpringSecurity提供了多种登录认证的方式,由多种Filter过滤器来实现,比如:
根据我们不同的需求实现及配置,不同的Filter会被加载到应用中。 二、结合源码讲解登录验证流程 我们就以用户名、密码登录方式为例讲解一下Spring Security的登录认证流程。 2.1 UsernamePasswordAuthenticationFilter 该过滤器封装用户基本信息(用户名、密码),定义登录表单数据接收相关的信息。如:
2.2 AbstractAuthenticationProcessingFilter的doFilter方法的验证过程 UsernamePasswordAuthenticationFilter继承自抽象类AbstractAuthenticationProcessingFilter,该抽象类定义了验证成功与验证失败的处理方法。 2.3 验证成功之后的Handler和验证失败之后的handler 也就是说当我们需要自定义验证成功或失败的处理方法时,要去实现AuthenticationSuccessHandler或AuthenticationfailureHandler接口 三、登录验证内部细节 3.1多种认证方式的管理 ProviderManager ProviderManager用继承于AuthenticationManager是登录验证的核心类。ProviderManager保管了多个AuthenticationProvider,用于不同类型的登录验证。比如:
public class ProviderManager implements AuthenticationManager,MessageSourceAware,InitializingBean { 下文是ProviderManager的核心源码,遍历不同登录验证的AuthenticationProvider,只有当这种方式被支持的时候,才执行具体的登录验证逻辑。 3.2 登录认证接口 AuthenticationProvider public interface AuthenticationProvider { Authentication authenticate(Authentication var1) throws AuthenticationException; boolean supports(Class<?> var1); } AuthenticationProvider的实现类定义了具体的登录验证逻辑 3.3 数据库加载用户信息 DaoAuthenticationProvider public class DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider { 从数据库获取用户信息源码 所以当我们需要加载用户信息进行登录验证的时候,我们需要实现UserDetailsService接口,重写loadUserByUsername方法,参数是用户输入的用户名。返回值是UserDetails。 总结 以上所述是小编给大家介绍的Spring Security登录验证流程源码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |