自定义springstarter(Spring Security(5))
您好 ,我是湘王 ,这是我的博客园,欢迎您来 ,欢迎您再来~
经常上网的人都应该有这样的体验:很多网站或者APP只需要第一次登录时输入用户名和密码之后 ,后面很长一段时间内就不需要再次输入密码了 。这确实是一个非常好的体验 ,不然每次都让人输用户名和密码就太麻烦了 。
SpringSecurity也提供了这样的功能 ,也就是Remember-Me(记住我)。
要实现这个功能也异常简单:只需要稍稍修改一下WebSecurityConfiguration即可:
在postman的参数中增加remember-me参数 ,并设为true再访问就行了:
结果也很清楚:
虽然用cookie实现记住我很方便 ,但是如果涉及到敏感信息的话 ,cookie太过简单满足不了需求 。所以 ,Spring Security提供了另外一种实现机制:保存到数据库中 。也就是自动登录时 ,用cookie中的加密串到数据库中验证,如果通过 ,自动登录才算成功 。使用这种方式实现remember-me很简单 ,只需要在WebSecurityConfiguration中增加一段代码就行了:
因为需要在数据库中保存 ,那么自然就需要创建相应的数据库表:
同样 ,在WebSecurityConfiguration中再加入如下代码(需要注意的是 ,datasource是不能够通过连接池得到的 ,这里连接池注入的是javax.sql.DataSource):
这样就可以了 ,然后运行postman进行测试 。
可以看到 ,由于是60秒失效 ,因此在第一次访问60秒后 ,再调用同样的接口时,名称为remember-me的cookie消失了 。数据库的persistent_logins表中也多了一条用户访问记录 。
失效规律:
1 、过期时间的最小值是60秒 ,如果设置的值小于60秒 ,也会被更改为60秒;
2 、默认的失效时间会从用户最后一次操作开始计算过期时间 。
MySQL虽然方便,但是一般MySQL是用来保存主要业务数据的 ,这种技术性的数据最好不要和业务混在一起 。所以 ,下一次就来说说怎么用NoSQL实现记住我 。
感谢您的大驾光临!咨询技术 、产品 、运营和管理相关问题,请关注后留言。欢迎骚扰 ,不胜荣幸~
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!