记住我功能主要讲解为3点:前端
在用户发送认证请求以后,或调用咱们以前说过的usernamePasswordAuthenticationFilter这个过滤器,认证成功以后会调用一个RemeberMeService服务;负责针对每一用户生成一个Token,而后将token写入到浏览器的Cookie里面,同时会使用:TokenRepository将这个token写入数据库中。将Token写入数据库时候,同时会把用户认证成功的用户名一并写入数据库(此时用户名和token是一一对应的)中由于咱们是在用户认证成功以后作的,因此会将用户信息写入,下次用户访问的时候就不须要再次登陆了。当用户下次请求的时候会通过过滤器链中的RemeberMeAuthenticationFilter(这个过滤器做用就是读取cookie中token)而后交给RemeberMeService,RemeberMeService经过TokenRepository到数据库去查询这个Token数据库里面有没有记录。若是有记录就去除用户名,取出用户名以后,就会去调用UserDetailsService,获取用户信息,而后把获取的当前用户信息放到SecurityContext里面。这样就把用户登陆上了。web
另外再说一下:RemeberMeAuthenticationFilter在咱们的过滤器链中绿色过滤器中,他是在倒数第二个位置。前面是其余的认证,其余的认证都无法认证用户信息的时候RemeberMeAuthenticationFilter尝试去作认证。 spring
配置TokenRepository读取数据库
在spring-security-web项目中添加:数据库