java学习笔记(二):Spring-security的Remember-me配置,以及配置Session管理器防止Session fixation

java学习笔记(二):Spring-security的Remember-me配置,以及配置Session管理器防止Session fixation


Remember-me配置

今天在完善自己毕设的登录操作时,想为我的登录弄一个记住我的选项,能够使我短时间内可以免登录。好在Spring-security封装好了这个功能,我们只要调用就好。而这个功能在Spring-security有两种实现方式:1)将登录信息发送给浏览器以Cookie的方式存储,登录的时候进行验证拿出Cookie来进行比较。2)将登录信息放入数据库中,登录的时候对比表的字段。

而今天我想说的是关于第二种的配置。第一种方法有很直白的问题,就是安全问题,存在浏览器中Cookie实在过于不安全,很容易被盗取。那么话不多说,需要完成第二种方法首先我们要去建一个表来存储我们的Session,而这个表的名字和字段是Spring-security规定好的,我们不能随意去改动,而sql语句如下:

CREATE TABLE persistent_logins (username VARCHAR(64) NOT NULL DEFAULT ‘’, series VARCHAR(64) PRIMARY KEY, token VARCHAR(64) NOT NULL , last_used TIMESTAMP NOT NULL)

建立好表的第二步当然要去我们的Spring-security的配置文件去配置我们的Remember-me,对应的部分属性我也在注释上表明了,希望大家能够明白每个属性到底有什么用,能够更好的学习成长:
在这里插入图片描述


第三步就是给定记住我的前端参数了,注意前端一定有一个remember-me参数,这个参数等于true代表是记住,false为不记住,只有当我们规定了这个参数Spring-security才能知道是否启用rememeber-me。而我是用ajax和json来进行数据传输的,以下是个人的代码:
在这里插入图片描述
在这里插入图片描述



Session fixation问题的引出

配置起来确实毫不费劲,但是这里面很容易的抛出了一个问题:我们该如何防止Session fixation攻击。

在解决这个问题之前,我们需要了解什么是Session fixation。Session fixation是会话伪造漏洞。让我举个例子来说就是比如说我访问了一个网站,得到一个session会话的id,如果这个网站没有特殊处理过Session fixation,那么这个会话id在我们登录前和登录后都是同一个。如果此时我把这个id作为参数附带到网站的url上发给别人,别人点进去后是跟我处于同一个Session会话中,此时他输入账号密码登入进去时我也会获得他的身份从而登陆进去,从而为所欲为。



Spring-security的Session管理器

这种我们都能想到的问题,制作Spring-security的大哥们能想不到吗?所以我们可以通过配置Spring-security的Session管理器来解决这个问题,配置如下:

在这里插入图片描述
这个配置为我们解决两个问题:1)Session fixation攻击问题。2)当一个用户多个地方登录的处理。

首先第一个问题通过session-fixation-protection这个属性来解决的,migrateSession代表的是当我们登录后我们会产生一个新的Session来使用且复制我们之前那个Session的所有属性。这样的话,当我们被Session fixation攻击了,我们点入别人的链接,输入了账号密码,但是此时我的Session在登录之后不再是之前的Session,别人也就无从利用之前的Session来冒充我们的身份了。

第二个问题是通过security:concurrency-control标签实现的,我们可以规定一个用户最多存在的session为1,此时当这个用户又在别处的登录的时候,之前的用户的session会销毁掉,只有当前这个用户才能继续访问。

配置完Session管理器,我们还需要对应的去web.xml里配置一个监听器,这个是绝对不能缺少,我们的Session的自动销毁要通过这个监视器才能实现:
在这里插入图片描述



今日的笔记到这也就结束,通过上一篇和这一篇,我们已经基本把spring-security关于登录认证这一方面给弄通透了,这也是这个框架的核心内容,希望各位能从中得到一定的参考和见解!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值