SpringSecurity学习之路11-实现记住我的功能

目的:用户勾选记住我之后,一段时间内免登陆。

{都是接着之前的代码,一点点加、重构代码的,不会在这里详细叙述之前提到的东西,以后的篇幅也是这样}

下图是关于SpringSecurity的原理介绍:

当登录成功之后,RememberService会将Token存储进浏览器Cookie,再将它写入进数据库里。当再次进行登录操作时,便会拿着浏览器中的token去数据库中查找,查找成功之后便会调用UserDetailsService。

首先需要在原先的登录页面中加一个checkbox

 注意,name的值必须叫这个。

因为是将token信息存储进了数据库,所以还需要进行下数据库配置,配置信息写在application.Properties中。

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/imooc-demo?useUnicode=yes&characterEncoding=utf8
spring.datasource.username=name
spring.datasource.password=password

然后将数据源以及UserDetailsService注入进来

接下来要做的事情就是在BrowserSecurityConfig类(继承了WebSecurityConfigurerAdapter)中新建persistentTokenRepository()方法(方法名无要求),其返回类型为PersistentTokenRepository。

 红色标注的代码作用是,启动时自动创建存储token的表{点进这个方法里提供有SQL语句,可以手动创建}。

最后就是在configure()方法中将remember配置进去,代码如下:

至此,关于rememberMe的配置就结束了,原理图看着挺多的,配置起来就这几步。

下面通过debug的方式,实际感受下rememberMe的工作流程。(结合最上面的rememberMe原理图)

首先,清除原有token、cookie数据,在地址栏访问/user,会进入到登录页面,输入正确的信息之后点击登录,会进入到UsernamePasswordAuthenticationFilter类中:

判断请求是不是以post方式提交的,然后获取到用户名和密码信息,并生成token

在判断登录成功之后,会进入到以下方法中去

 这个就是登录成功之后所进入到的方法,第一个红框部分意思是将登录成功的用户信息,包括权限信息等存储进session。第二个红框部分就是调用rememberServices方法,往下执行

 创建一个新的token,存储进数据库。向浏览器返回cookie信息。至此,流程结束。现在数据库表中已经有了一条信息。

接下来我们重启服务,重启浏览器,直接访问/user,看看流程是咋走的。

判断session里是否有用户权限信息,即该请求是否通过了UsernamePasswordAuthenticationFilter或BasicAuthenticationFilter的验证,如果没有通过验证, 则调用rememberServices的autoLogin方法。接着往下走,

根据Series获取Token信息,然后根据查询到的token信息里的用户名,使用UserDetailsService来做用户登录

往下走,如果获得了用户信息则表明登录成功,并将其存储进session,结束。

 至此,rememberMe功能介绍完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值