2019独角兽企业重金招聘Python工程师标准>>>

spring session spring:session:sessions:expires 源码跟踪 博客分类: spring

/*** Saves any attributes that have been changed and updates the expiration of this* session.*/private void saveDelta() {if (this.delta.isEmpty()) {return;}String sessionId = getId();getSessionBoundHashOperations(sessionId).putAll(this.delta);String principalSessionKey = getSessionAttrNameKey(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME);String securityPrincipalSessionKey = getSessionAttrNameKey(SPRING_SECURITY_CONTEXT);if (this.delta.containsKey(principalSessionKey)|| this.delta.containsKey(securityPrincipalSessionKey)) {if (this.originalPrincipalName != null) {String originalPrincipalRedisKey = getPrincipalKey(this.originalPrincipalName);RedisOperationsSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey).remove(sessionId);}String principal = PRINCIPAL_NAME_RESOLVER.resolvePrincipal(this);this.originalPrincipalName = principal;if (principal != null) {String principalRedisKey = getPrincipalKey(principal);RedisOperationsSessionRepository.this.sessionRedisOperations.boundSetOps(principalRedisKey).add(sessionId);}}this.delta = new HashMap<String, Object>(this.delta.size());Long originalExpiration = this.originalLastAccessTime == null ? null: this.originalLastAccessTime + TimeUnit.SECONDS.toMillis(getMaxInactiveIntervalInSeconds());RedisOperationsSessionRepository.this.expirationPolicy.onExpirationUpdated(originalExpiration, this);}}
public void onExpirationUpdated(Long originalExpirationTimeInMilli,ExpiringSession session) {String keyToExpire = "expires:" + session.getId();long toExpire = roundUpToNextMinute(expiresInMillis(session));if (originalExpirationTimeInMilli != null) {long originalRoundedUp = roundUpToNextMinute(originalExpirationTimeInMilli);if (toExpire != originalRoundedUp) {String expireKey = getExpirationKey(originalRoundedUp);this.redis.boundSetOps(expireKey).remove(keyToExpire);}}long sessionExpireInSeconds = session.getMaxInactiveIntervalInSeconds();String sessionKey = getSessionKey(keyToExpire);if (sessionExpireInSeconds < 0) {this.redis.boundValueOps(sessionKey).append("");this.redis.boundValueOps(sessionKey).persist();this.redis.boundHashOps(getSessionKey(session.getId())).persist();return;}String expireKey = getExpirationKey(toExpire);BoundSetOperations<Object, Object> expireOperations = this.redis.boundSetOps(expireKey);expireOperations.add(keyToExpire);long fiveMinutesAfterExpires = sessionExpireInSeconds+ TimeUnit.MINUTES.toSeconds(5);expireOperations.expire(fiveMinutesAfterExpires, TimeUnit.SECONDS);if (sessionExpireInSeconds == 0) {this.redis.delete(sessionKey);}else {this.redis.boundValueOps(sessionKey).append("");this.redis.boundValueOps(sessionKey).expire(sessionExpireInSeconds,TimeUnit.SECONDS);}this.redis.boundHashOps(getSessionKey(session.getId())).expire(fiveMinutesAfterExpires, TimeUnit.SECONDS);}

转载于:https://my.oschina.net/xiaominmin/blog/1598445

spring session spring:session:sessions:expires 源码跟踪相关推荐

  1. 手撸Spring系列12:MyBatis(源码篇)

    说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...

  2. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  3. spring MVC cors跨域实现源码解析

    spring MVC cors跨域实现源码解析 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议.IP.http方法任意一个不同就是跨域. sp ...

  4. Spring Boot Dubbo 应用启停源码分析

    作者:张乎兴 来源:Dubbo官方博客 背景介绍 Dubbo Spring Boot 工程致力于简化 Dubbo RPC 框架在Spring Boot应用场景的开发.同时也整合了 Spring Boo ...

  5. Spring Boot 2.x 启动全过程源码分析(全)

    上篇<Spring Boot 2.x 启动全过程源码分析(一)入口类剖析>我们分析了 Spring Boot 入口类 SpringApplication 的源码,并知道了其构造原理,这篇我 ...

  6. Spring Boot 2.x 启动全过程源码分析(上)入口类剖析

    转载自   Spring Boot 2.x 启动全过程源码分析(上)入口类剖析 Spring Boot 的应用教程我们已经分享过很多了,今天来通过源码来分析下它的启动过程,探究下 Spring Boo ...

  7. 【java】本地客户端内嵌浏览器3 - Swing 使用 Spring 框架 + 打包项目 + 转exe + 源码

    目录 ★☆★ 写在前面 ★☆★ ★☆★ 本系列文章 ★☆★ ★☆★ 开源网址 ★☆★ 一.给 Swing 加上 Spring 0.前期努力 I. SpringBoot II. SpringMVC 1. ...

  8. DSIN 深度 Session 兴趣网络介绍及源码剖析

    DSIN 深度 Session 兴趣网络介绍及源码剖析 前言(可以忽略~) 本文介绍 DSIN 网络的基本原理,并对源码进行详细分析,从数据预处理,训练数据生成,模型构建等方面对 DSIN 的完整实现 ...

  9. 黑马上新Spring全套教程(含实战源码)

    "八股在手,offer全有",为了通过面试,你有背过"八股文"吗? 教程推荐:黑马程序员新版Spring零基础入门到精通,一套搞定spring全套视频教程(含实 ...

最新文章

  1. 图像直接卷积 Sobel 边缘实现
  2. PostgreSQL中的大容量空间探索时间序列数据存储
  3. cisco 交换机 定期 自动 备份配置 -linux,交换机定时自动备份配置文件的方法
  4. 数字黑洞java_[蓝桥杯][算法提高VIP]数字黑洞 (Java代码)
  5. 52条实用经验,SQL优化不再难!
  6. %rowtype mysql_Oracle %type和%rowtype小实例
  7. 正则表达式匹配手机4位尾号
  8. RECOLL检索软件测试工资,Recoll桌面全文搜索工具
  9. angularjs框架
  10. 【干货】2021顾客体验十二大趋势:从“千人一面”到“千人千面”.pdf(附下载链接)...
  11. 资源监视工具 Glances
  12. 永恒之蓝漏洞紧急应对方案
  13. 服务器 支持sata硬盘,服务器SAS硬盘背板能插SATA硬盘吗?
  14. Pyscript,使用Python编写前端脚本
  15. Python3.7出现RuntimeError: generator raised StopIteration异常
  16. Linux iptables 防火墙相关资料
  17. 游戏设计模式-原型模式
  18. 路由及路由器工作原理深入解析1:概述
  19. 配置secureCRT
  20. XILINX 7系列FPGA_Slice_存储器_XADC篇

热门文章

  1. 随机数生成器python_Python中的随机数生成器
  2. 如何在C ++中实现内联函数?
  3. primefaces_Primefaces命令按钮
  4. 面试Java岗位时,总被面试题困扰,分享企业爱用的面试题
  5. Java新职篇:什么是键入程序
  6. Spring Boot Admin Reference Guide
  7. 为linux系统引导和登录提供安全加固
  8. Linux 密码复杂度
  9. Mac 上管理多个 java 版本
  10. apache cgi python