1、rememberMe的创建
1.1 简介
大多数的rememberMe都是使用CookieRememberMeManager来实现的,如果要是使用其他途径则集成AbstractRemeberMeManager这一抽象类,自我实现。
1.2rememberMe的创建
如果登陆的时候验证通过了之后就会调用onSuccessfullLogin()方法
点进去之后 调用一个壳方法
在点进去之后就是熟悉的回去RememberMeManager然后回调他的onSuccessfulLogin()这一方法
在这一方法中一进去之后就是忘记验证
忘记验证中最后会调用removeFrom这一方法,在这一方法中会写一个名为rememberMe值为deleteme生存时间为0的cookie,同时将这个cookie放到response的头上面去,并将这一cookie发送到前台去,无论登陆是否选择记住我都会将这个cookie发送到前台,因为这一cookie的生存时间极端,所以不影响。
前台Response的set-cookie字段如下图
返回的cookie如图,maxAge为0
回到忘记验证那里如果判断该次登陆含有记住我这一选项,如果验证通过则将用户信息通过对象流写出字节数组,将字节数组加密,序列化(看到这里就应该知道的是,用户信息对象必须是实现了虚拟化接口的)
进入rememberIdentity具体实现方法在rememberSerializedIdentity通过saveTo将cookie写到前台去,流程到了这里记住我cookie就生成成功了,并发到了前台中去等待下一次请求携带,至于如何携带cookie到前台,请参考我的另一篇文章 (╹▽╹)。
2、下一次登陆的流程
下一次登陆必然是关掉浏览器之后的登陆,只要没有清除掉cookie都是生效的,请求接口的时候就会携带这一cookie到后台中,如果请求的接口使用的是user拦截器(UserFilter)那么可以直接通过验证,可以正常访问该接口,可以访问接口了那么页面自然就能渲染出来。
在userFilter中首先判断是否是访问的登陆界面,如果是登陆界面则直接通过,如果不是登陆界面的话则去获取subject信息。
获取去subject的途中会再一次创建subject,这个时候就会调用resolvePrincipals去获取用户信息。
resovelPrincipals方法具体作用(这里只介绍记住我的逻辑)就是去获取rememberMe的cookie信息这个cookie解密之后就是用户信息
点进去之后就是获取RememberMeManager,获取之后调用它的getRememberedPrincipals方法
这个方法里面又去将用户信息转为字节数组,转为字节数组之后又将字节数组解密为用户信息,到这里如果能够从cookie中拿取用户信息的话,则将用户信息放入到subject中去。然后创建subject,大概流程结束.
完结撒花 (╹▽╹) 如果有帮到你我也很开心哒