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关于登录认证这一方面给弄通透了,这也是这个框架的核心内容,希望各位能从中得到一定的参考和见解!

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

  1. Java学习笔记-Day64 Spring 框架(二)

    Java学习笔记-Day64 Spring 框架(二) 一.控制反转IOC和依赖注入DI 1.控制反转IOC 2.依赖注入DI 3.Spring IOC容器 3.1.简介 3.2.实现容器 3.2.获 ...

  2. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  3. Java学习day051 记录日志(基本日志、高级日志、修改日志管理器配置、本地化、处理器、过滤器、格式化器、日志记录说明)

    使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识. day051   记录日志(基本日志.高级日志.修改日志管理器配置.本地化.处理器.过滤器.格式化器 ...

  4. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  5. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

  6. java学习笔记(二) ----基本数据类型应用

    &和&&和区别,&&如果等式一边不成立就短路,&不管&左边的成不成立,右边等式都执行 &&短路与, ||短路或 | 或,表达式两 ...

  7. Java学习笔记二十二:Java的方法重写

    Java的方法重写 一:什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则 返回值类型.方法名.参数类型及个数都要与父类继承的 ...

  8. java actionscript_ActionScript(对比Java)学习笔记二

    27.ActionScript中的组件对象: 类似于Java中的Swing组件对象,ActionScript提供了很多组件!! (可以自行查看官网提供的组件列表学习,也可擦看已经拥有的flex+3+c ...

  9. JAVA学习笔记(二十)- 集合 List

    ArrayList 集合 /** ArrayList,实现List接口* 声明数组时必须指定数组中元素的类型,可以是基本数据类型,也可以是引用数据类型* 声明集合时可以不指定其元素的类型,元素类型默认 ...

  10. JAVA 学习笔记 (二)

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一 ...

最新文章

  1. 毕业设计《MMORPG DEMO》——1
  2. python中utf8占几个字节_为什么utf8占用3个字节
  3. QDoc命名事物Naming Things
  4. 云计算设计模式(十六)——优先级队列模式
  5. Linux文件编程(2)
  6. Cloud Foundry Java客户端–流事件
  7. decimal类型对象里面定义什么类型_奥斯塔罗 单身开启桃花雷达 现阶段的我适合什么类型的对象?...
  8. NuGet的简单使用
  9. 岭回归预测PM2.5
  10. 1.9 编程基础之顺序查找 10 找最大数序列(5分) python
  11. xcode4.3.2 arc模式下导入非arc的文件 转
  12. 谷歌母公司2019Q1财报出炉,营收增速放缓,盘后大跌7.34%,市值蒸发700亿刀
  13. 初学者 | 分词的那些事儿
  14. Oracle诊断案例-Sql_trace之一
  15. 第七章-寻找软件的注册码
  16. 计算机论文获奖证书,教改论文获奖证书-中国教育学会获奖证书评高级有用吗?...
  17. win10亮度无法调节,怎么处理
  18. NETDMIS5.0端面圆跳动2023
  19. actuator--基础--6.1--端点解析--health端点
  20. iOS逆向 - iOS13 iOS14 模拟点击 模拟触摸 按键模拟 新触动精灵 开源免费

热门文章

  1. 华为任命徐直军为华为云董事长,余承东任CEO | 任正非:做事要充满霸气,做人一定要谦卑!...
  2. BouncyCastle使用
  3. su - root 和 su root 的区别
  4. 60行C代码实现一个shell
  5. 一区HR:南京农业大学房婉萍教授团队揭示茶树-豆科植物互作改善茶叶品质
  6. 用opencv将左右眼3D图片转换为红蓝3D图片
  7. Android编程制作漫画,画出自己的漫画 Android漫画风制作所
  8. 似然比和p值不同的原因_二代P值:传统P值的升级 | 社论前沿
  9. 还贷款 月供贷款计算
  10. 计算机主板 上电顺序,笔记本电脑主板的上电过程