springsecurity多模式认证学习

123 阅读1分钟

所有请求会先经过filter,filter里面我们定义拦截节点,常规的密码登陆用的是/oauth/token,如果我们需要用到邮箱或者短信验证码,则自己新建一个filter,filer网上例子很多,不再这边展开,每一个filter需要定义AbstractAuthenticationToken,默认的账号密码使用的是UsernamePasswordAuthenticationToken,我们不用去修改它,每次登陆的时候,通过不同的filter,代码在进入AuthenticationManager进行认证的时候,会去抓取所有的认证AuthenticationProvider,校验这种token能不能被他supports,不能,则continue,只要有一种能够实现就可以了。如下图所示。 有些人会在 protected void configure(HttpSecurity http) throws Exception 中最后添加,addFilterBefore,实测不加也可以,因为我们本身就已经定义了filter,默认估计是after,这里我没有去看源码,但是尿性肯定是这个样子,自己添加permitAll允许例如邮箱或者短信接口通过即可以,或者addFilterBefore

http.addFilterBefore(mobileCodeAuthenticationProcessingFilter(), UsernamePasswordAuthenticationFilter.class);

大概就下图这个流程,我用比较通俗化的语句讲了下。

随时补充!