spring Security RememberMe认证

3月 11, 2018 |

RememberMeServices有三个方法
loginFail和loginSuccess分别在用户登录成功或者失败后调用, 比如(UsernamePasswordAuthenticationFilter和BasicAuthenticationFilter,登录请求中需要有name="remember-me"的参数),RememberMeAuthenticationFilter执行时,SecurityContextHolder中没有Authentication对象,那么调用autoLogin执行rememberMe登录。
实现方式有两种, 一种是基于token(TokenBasedRememberMeServices, base64(username + ":" + expirationTime + ":" +md5Hex(username + ":" + expirationTime + ":" password + ":" + key)),写入cookie), 另一种是基于持久化的实现(PersistentTokenBasedRememberMeServices, 将username,series,token,last_used四元组写入持久化介质,series对应数据库中的主键, token对应cookie中的值,这种方式不会讲username暴露在cookie中,相对而言更安全)
如果基于xml的配置

TokenRepository默认有基于内存和基于数据库的两种实现。
PersistentTokenBasedRememberMeServices需要配置一个tokenRepository的实现,如果是基于xml的配置, 只要对remember-me元素添加token-repository-ref属性或者data-source-ref属性, 那么系统就会使用PersistentTokenBasedRememberMeServices,默认使用TokenBasedRememberMeServices

Posted in: Spring Security

Comments are closed.