spring security的登录验证流程核心就是过滤器链。当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问api接口了。
springsecurity提供了多种登录认证的方式,由多种filter过滤器来实现,比如:
根据我们不同的需求实现及配置,不同的filter会被加载到应用中。
我们就以用户名、密码登录方式为例讲解一下spring security的登录认证流程。
该过滤器封装用户基本信息(用户名、密码),定义登录表单数据接收相关的信息。如:
usernamepasswordauthenticationfilter继承自抽象类abstractauthenticationprocessingfilter,该抽象类定义了验证成功与验证失败的处理方法。
也就是说当我们需要自定义验证成功或失败的处理方法时,要去实现authenticationsuccesshandler或authenticationfailurehandler接口
providermanager用继承于authenticationmanager是登录验证的核心类。providermanager保管了多个authenticationprovider,用于不同类型的登录验证。比如:
public class providermanager implements authenticationmanager, messagesourceaware, initializingbean { …… private list<authenticationprovider> providers; ……
下文是providermanager的核心源码,遍历不同登录验证的authenticationprovider,只有当这种方式被支持的时候,才执行具体的登录验证逻辑。
public interface authenticationprovider { authentication authenticate(authentication var1) throws authenticationexception; boolean supports(class<?> var1); }
authenticationprovider的实现类定义了具体的登录验证逻辑
public class daoauthenticationprovider extends abstractuserdetailsauthenticationprovider {
从数据库获取用户信息源码
所以当我们需要加载用户信息进行登录验证的时候,我们需要实现userdetailsservice
接口,重写loaduserbyusername
方法,参数是用户输入的用户名。返回值是userdetails
。
如对本文有疑问, 点击进行留言回复!!
NullPointerException: Attempt to invoke virtual method ‘android.content.res.XmlResourceParser androi
关于启动appium-desktop,报错:Cannot extract apk info using apkanalyzer. Falling back to aapt. Original ....
Gradle 发布共享库——如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库
Gradle 发布共享库——如何通过Gradle发布java依赖库(jar)到 jitpack 公共仓库(—)
网友评论