一、前言

  本文:https://www.cnblogs.com/Twobox/p/10361712.html

  参考:https://www.cnblogs.com/diewufeixian/p/4221747.html

  自己设计SSO系统的时候,需要考虑多个客户网站与中心网站的Session有效期同步问题。

  即需要满足:

    客户端网站Session剩余失效时间必须短于中心网站。

    中心网站Session失效的时候,客户端网站必须全部声明失效。

  场景:

    用户第一次在中心网站登陆的时候会创建并刷新 中心网站 的Session过期时间。但随后就去访问子网站,后面可能就不会再访问中心网站。

    故:用户访问某子网站时,子网站通知中心网站刷新Session过期时间。

    

    子网站毕竟是别人的网站,中心网站无法保证子网站会及时通知自己刷新Session过期时间。所以也可能存在某子网站Session待过期时间长于中心网站。

    故:为了安全保证并瞒住上面两个要求。监听器监听中心网站某Session失效后,随后通知相关子网站强制声明Session失效。

二、开始

  按照优先级,从小到大介绍:

  ① 在web容器中设置(以tomcat为例)

    

    tomcat/conf/web.xml 下 12%左右的位置。

    

    单位为分钟!!!

    tomcat默认session超时时间为30分钟,负数或0为不限制session失效时间。

  ② 在程的web.xml中设置

    

    单位为分钟!!!

    ③ 过java代码设置

    session.setMaxInactiveInterval(30*60);

    单位为 秒!!!!!!

    即在没有活动30分钟后,此session将失效。

  三种方式优先等级:1 < 2 < 3

三、session监听器

  当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。

  监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法
  自己可以继承这个类,然后分别实现
  sessionCreated指在session创建时执行的方法
  sessionDestroyed指在session失效时执行的方法
  例子:

 public class OnlineUserListener implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent event){
// session创建后
HttpSession session=event.getSession;
// 有了 session后,巴拉巴拉巴拉一顿操作。
} public void sessionDestroyed(HttpSessionEvent event){
// session 立马销毁前
HttpSession session=event.getSession;
// 有了 session后,巴拉巴拉巴拉一顿操作。
}
}
}

四、后言

  然后就可以胡作非为了。

  2019-02-11 14:14:48

【学习笔记】【Javaweb】二、Session对象过期时间三种设置方法、Session失效监听器的更多相关文章

  1. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)——VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  2. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见

    我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置.   一.动态设 ...

  3. Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash

    引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...

  4. JavaWeb关于session生命周期的几种设置方法

    一般session的生命周期都是建立在用户登录系统后对用户信息进行一个记录,session类似于你有一张银行卡,而卡里的钱就是属于session存储的信息,卡掉了就不能取出里面的钱. 以前sessio ...

  5. O(n*logn)级别的算法之二(快速排序)的三种实现方法详解及其与归并排序的对比

    一,单路快排1.测试用例: #ifndef INC_06_QUICK_SORT_DEAL_WITH_NEARLY_ORDERED_ARRAY_SORTTESTHELPER_H #define INC_ ...

  6. DOM学习笔记(二)对象方法与属性

    所有 HTML 元素被定义为对象,而编程接口(对象的访问)则是对象方法和对象属性. 事实上,常用的只用window对象及其子对象document对象,以及事件Event对象. Window 对象 Wi ...

  7. Java并发编程学习笔记(二)——对象的共享

    主要概念:可见性.重排序.失效数据.最低安全性.发布.逸出.线程封闭(Ad-hoc.栈封闭.ThreadLocal类).不变性.Final域.事实不可变对象. 1.在没有同步的情况下,编译器.处理器以 ...

  8. spring学习笔记2---MVC处理器映射(handlerMapping)三种方式(附源码)

    一.根据Beanname访问controller: 在springmmvc-servlet.xml的配置handlermapping中加入beanname,通过该beanname找到对应的contro ...

  9. Java学习笔记之linux配置java环境变量(三种环境变量)

    0x00 压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲回车 ...

随机推荐

  1. [Swift]LeetCode90. 子集 II | Subsets II

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  2. [Swift]LeetCode486. 预测赢家 | Predict the Winner

    Given an array of scores that are non-negative integers. Player 1 picks one of the numbers from eith ...

  3. [Swift]LeetCode801. 使序列递增的最小交换次数 | Minimum Swaps To Make Sequences Increasing

    We have two integer sequences A and B of the same non-zero length. We are allowed to swap elements A ...

  4. [Swift]LeetCode805. 数组的均值分割 | Split Array With Same Average

    In a given integer array A, we must move every element of A to either list B or list C. (B and C ini ...

  5. SQL执行错误#1064---保留字错误

    CREATE TABLE IF NOT EXISTS `change` ( `id` INT NOT NULL AUTO_INCREMENT, `creator` VARCHAR(45) NOT NU ...

  6. 解决Eclipse中无法查看Java源码

    1.点 "window"-> "Preferences"-> "Java" -> "Installed JRES ...

  7. 【CDH篇】---CDH从初识到搭建到应用

    一.前述 CDH(Cloudera's Distribution, including Apache Hadoop)是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache ...

  8. http缓存与离线缓存

    一.http协议实现缓存 1. 缓存头部 通用缓存.条件缓存.缓存控制三大类 头部名称 说明 请求/响应 通用缓存头部 控制客户端是否向服务器发送请求或者是服务端响应请求   cache-contro ...

  9. qt5 connect问题

    参考资料:Qt学习之路2     在qt从4到5的升级过程中,connect的方法只是添加了一些重载的形式,qt5新增的connect添加了编译器类型检查,如果遇到匹配失败的,或者找不到信号/槽的地方 ...

  10. .net好好地利用Conditional属性

    Conditional是.net提供关于编译的属性描述,其作用是添加到方法或属上,通过定义编译符的方式告指示编译器应忽略方法调用或属性.在.NET中Debug 和 Trace 类中的方法都添加了这属性 ...