开发者学堂课程【Spring Security知识精讲与实战演示(二):Remember 功能持久化token信息】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/731/detail/13045
Remember 功能持久化 token 信息
基本实现了 remember-me 为什么说是基本实现了?因为还有安全性需要注意。当前 remember-me 记住的是当前登录的信息,换句话说现在的token如果被拿走,迁到自己的浏览器,这样也是可以登录的。前提是 remember-me没有过期,可以在自己的浏览器中添加一个 JSESSION 名,叫 remember-me,接下来域名就是网站的名称,将 token 值拿过来,过期时间保持一致就可以。这样就可能会盗取 token,token 就不安全了。所以 token 放在这里不是很安全。
应该将 token 放在数据库中存储,这样比较安全。这样用户可以看到自己的浏览器,但是看不到公司的数据库,所以应该持久化 remember-me的token。要想做到持久化必须新添加一张表,这张表是官方提供的,并且需要固定这张表的名称和字段不能改变,改变之后无法使用。
如下图,发现左侧导航栏中有 persistent-logins 表,但是发现现在打开这张表,刷新之后没有数据。在刚刚就操作 remember me 很多次了,为什么没有数据呢?
是因为这张表默认有了不会直接使用,需要自己加上 data-source-ref=“datasource”这个属性。就是需要在 remember me 中加入数据库连接词的一个对象。
将上图 data-source-ref=“datasource”输入到如下图位置,这样就会持久化到数据库了。
Remember-me-parameter=“remember-me”这一句可以省略。后面两句都是可以省略。需要的话可以加上。
Remember-me-parameter=“remember-me”的意思是remember-me中的name值必须是:remember-me“/。不能换做别的。其实也是可以修改的,但是”“中的内容需要保持一致即可。
”data source“是对对象的引用,这个ID是来自于IOC容器中一个对象的ID。
目前有两个IOC容器,applicationContext.xml是父容器,spring_mvc.xml是子容器。
现在CTRL的对象都要放到子容器内。IOC子容器可以被外界用http请求访问但是无法访问父容器。父容器只能通过子容器才能被外界调用。
总之要分区data source来自于哪里,不要点错。
这时可以重新启动项目,启动完成之后就可以做测试。
目前是启动的状态,填入用户名小马,勾选”记住“,点击登录。来到数据库刷新之后会发现已经把 token 信息记录下来了。
在数据库端记录 token 相对来说就比较安全。以上就把 remember-Me 的功能内容。remember-Me 功能的使用希望是将 token 记录到数据库。