【CAS6.6源码解析】ST的默认淘汰策略 MultiTimeUseOrTimeoutExpirationPolicy

news2024/10/5 18:10:35

本篇文章是对上篇文章【深度解析票据淘汰与过期策略】的一个补充,上篇文章主要分析了TGT的默认淘汰策略配置,ST的配置有TGT的默认配置有一些差异化,特别是ST是基于MultiTimeUseOrTimeoutExpirationPolicy这样一种淘汰策略,本文将详细解析ST的淘汰策略。

文章重点分析源码的过程,不想看分析过程可以直接跳到总结处看结论!!!


文章目录

  • A.相关阅读
  • B.ST淘汰策略深入解析
    • 1.淘汰策略的获取
    • 2.MultiTimeUseOrTimeoutExpirationPolicy
      • 2.1 核心参数及其默认配置
      • 2.2 过期校验
  • C.总结


A.相关阅读

  • 【CAS6.6源码解析】在IDEA中调试可插拔的supprot模块
  • 【CAS6.6源码解析】调试Rest API接口
  • 【CAS6.6源码解析】深入解析TGT和ST的唯一ID是怎样生成的-探究ID生成器的设计
  • 【CAS6.6源码解析】深度解析默认票据存储策略及其拓展支持-探究存储策略的设计
  • 【CAS6.6源码解析】深度解析票据淘汰与过期策略-探究数据淘汰策略的设计

B.ST淘汰策略深入解析

源码位置,淘汰策略从何而来,如何触发清理这些都在上篇文章( 【CAS6.6源码解析】深度解析票据淘汰与过期策略-探究数据淘汰策略的设计)中详细分析了,这里主要讲ST存在不一样的地方。

1.淘汰策略的获取

DefaultServiceTicketFactorydetermineExpirationPolicyForService方法可以看出,其仍然是采取如下策略:

  • registeredService中配置了淘汰策略,则使用其中的淘汰策略。
  • registeredService中没有配置淘汰策略,则使用配置文件中默认的淘汰策略。

在这里插入图片描述
注意,这里若registeredService中配置了淘汰策略,返回的是一个MultiTimeUseOrTimeoutExpirationPolicy.ServiceTicketExpirationPolicy实体。

可以进ticketExpirationPolicy.buildTicketExpirationPolicy()里看一下:

在这里插入图片描述
发现其也是返回的一样的实体。

由此可以发现,ST使用的是MultiTimeUseOrTimeoutExpirationPolicy这样一种淘汰策略

2.MultiTimeUseOrTimeoutExpirationPolicy

接下来我们看一下这种默认的淘汰策略有何特点,要看一种淘汰策略有何特点,我们只需要关注核心参数、默认配置、过期校验即可。

2.1 核心参数及其默认配置

MultiTimeUseOrTimeoutExpirationPolicy使用了系统配置里面的两个参数,如下:

  • numberOfUses:控制服务票证可以在CAS服务器中使用的次数。默认是1。
  • timeToKillInSeconds:在CAS服务器中有效的时间。默认是10s。

在这里插入图片描述
ST只能使用一次很好理解,但是为什么有效时间这么短呢,才10s?

我们回顾一下授权的流程可以发现,ST是由TGT授予的,ST被授予后应该立即去请求相应的服务,然后相应的服务拿着ST向CAS服务器验证ST是否有效。ST的定位就是针对某一个服务即时授予,短时间内用完一次后ST自然会失效。

2.2 过期校验

过期校验由MultiTimeUseOrTimeoutExpirationPolicy类的isExpired方法完成。核心代码如下:

在这里插入图片描述
其主要分为两部分:

  • 第一部分校验票据的使用次数,拿ST里面存储的使用次数去和配置的使用次数做比较。
  • 第二部分校验票据的过期时间,注意这里校验的逻辑是:ST的创建时间加上配置的过期时间与系统时间进行比对。

然后我们可以看一下ST里面的使用次数是怎么维护的:在这里插入图片描述
是在AbstractTicketupdateTicketState方法中进行维护的,所以票据使用后一般需要更新票据。

到这里,ST的淘汰策略已经清晰明了了。


C.总结

  • ST使用的是MultiTimeUseOrTimeoutExpirationPolicy这种淘汰策略。这种淘汰策略支持配置使用次数及超时时间。
  • ST默认只能使用一次,只存续10s,这也是ST的定位所决定的。

本篇文章只是上篇文章的一个补充,若想看淘汰策略的详细解析,可以查看上篇文章: 【CAS6.6源码解析】深度解析票据淘汰与过期策略-探究数据淘汰策略的设计


ATFWUS 2023-08-01

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精密划片机行业发展趋势

划片机行业的发展趋势主要包括以下几个方面: 高精度、高效率的切割技术:随着半导体芯片的尺寸不断增大,切割的精度和效率要求也越来越高。因此,行业将继续推动切割技术的创新和发展,以提高划片效率和精度。 自动化和智…

百度地图点标记加调用

先看效果 PHP代码 <?phpnamespace kds_addons\edata\controller;use think\addons\Controller; use think\Db;class Maps extends Controller {// 经纬度计算面积function calculate_area($points){$totalArea 0;$numPoints count($points);if ($numPoints > 2) {f…

Blazor前后端框架Known-V1.2.9

V1.2.9 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazor…

(学习笔记1)类和对象详解(C++)

类和对象 1.类的定义语法类的定义方式 2.类的访问限定符2.1 访问限定符的特点2.2 struct与class的区别 3. 三大特性3.1 封装4.类的作用域5.类的实例化6.类对象模型7.this指针7.1 this指针的特性7.2 this指针相关问题 1.类的定义 类是面向对象语言特有的语法&#xff0c;在面向…

数组中重复的数字_剑指 Offer 03

文章目录 题目描述法一 哈希表 题目描述 法一 哈希表 int findRepeatNumber(vector<int>& nums){unordered_map<int, bool> map;for(const int& num:nums){if(map[num]) return num;map[num]true;}return -1;}

c++游戏制作指南 模板(权当预告)

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f35f;欢迎来到静渊隐者的csdn博文&#xff0c;本文是c游戏制作指南的一部&#x1f35f; &#x1f355;更多文章请点击下方链接&#x1f355; &#x1f368; c游戏制作指南&#x1f3…

C++调用C# dll成功示例

方法1&#xff1a;公共语言运行时支持 一.准备C# dll类库 。生成CSLib.dll namespace CSLib {public class Class1{private string name;public string Name{get{return name;}set{name "Your Name: " value;}}} }二、写C应用调用 1)需要把dll复制到运行目录下。…

Python实现GA遗传算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…

超细详解,接口自动化测试-JSON和JsonPath提取数据(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 JSON(JavaScript …

修改若依框架为自己的项目并上传到git

第一步: 打开后台若依项目,把全局替换打开,搜索ruoyi 和 RuoYi 和 若依 分别换成自己公司的名称( 记住要把区分大小写打开 ) 第二步: 关闭idea中的项目,然后在文件夹中打开这个项目,然后搜索target( 缓冲 ) 删除,部分人的电脑上面还有imp文件切记也要删除 第三步: 接着把项目…

Day09-作业(Mybatis)

作业1&#xff1a;通过SpringBootMybatis的方式完成如下学员管理的需求 页面原型&#xff1a; 数据准备&#xff1a; -- 学员表 create table student(id int unsigned primary key auto_increment comment ID,主键,name varchar(10) not null comment 姓名,no char(10) not …

C++多线程基本原理详解

在C学习过程中&#xff0c;要想“更上一层楼”的话&#xff0c;多线程编程是必不可少的一步&#xff0c;大家需要更多的思考是为什么这么做&#xff1f;这样做的好处是什么&#xff1f;以及多线程编程都可以应用在哪里&#xff1f; 1、多线程 传统的C&#xff08;C11标准之前…

R语言中数据重塑(长宽表的转化)

学习笔记&#xff0c;仅供学习使用。 目录 1-什么是整洁的数据&#xff1f; 2-宽表变成长表 示例1&#xff1a; 示例2&#xff1a; 示例3&#xff1a; 3-长表变宽表 示例1&#xff1a; 示例2&#xff1a; 1-什么是整洁的数据&#xff1f; 按照Hadley的表述&#xf…

我的观影记录表【个人向】

目录 前言电影评分标准闪电侠&#xff08;2023&#xff09;银河护卫队3&#xff08;2023&#xff09; 前言 这里是我本人的观影记录&#xff0c;这个想法2年前就有了&#xff0c;但是一直比较懒&#xff0c;现在&#xff08;上班摸鱼&#xff09;准备重新开始&#xff0c;评价…

Spring Boot Starter 剖析与实践 | 京东云技术团队

引言 对于 Java 开发人员来说&#xff0c;Spring 框架几乎是必不可少的。它是一个广泛用于开发企业应用程序的开源轻量级框架。近几年&#xff0c;Spring Boot 在传统 Spring 框架的基础上应运而生&#xff0c;不仅提供了 Spring 的全部功能&#xff0c;还使开发人员更加便捷地…

Bigemap 在网络通讯行业中的应用场景

地图应用&#xff1a; 使用我们软件下载地图&#xff0c;对影像需求是高频更新&#xff0c;我们软件目前的更新频率可以满足需求&#xff0c;实现离线地图的下载&#xff0c;在地图上导入数据查看和标注点位&#xff0c;基站信号覆盖展示数据并且导出&#xff0c;并且会发送到…

​​​amoeba实现MySQL读写分离

​​​amoeba实现MySQL读写分离 准备环境&#xff1a;主机A和主机B作主从配置&#xff0c;IP地址为192.168.131.129和192.168.131.130&#xff0c;主机C作为中间件&#xff0c;也就是作为代理服务器&#xff0c;IP地址为192.168.131.136。三台服务器操作系统为RHEL6.4 x86_64,为…

Codeforces Round 889 (Div. 2)(视频讲解A——D)

文章目录 A Dalton the TeacherB Longest Divisors IntervalC2 Dual (hard Version)D Earn or Unlock Codeforces Round 889 (Div. 2)&#xff08;视频讲解A——D&#xff09; A Dalton the Teacher #include<bits/stdc.h> #define endl \n #define INF 0x3f3f3f3f us…

自定义MVC增删改查

目录 mymvcdemo是自定义mvc框架的使用示例 1.1 实体类 1.2 dao方法 1.3 写Service / biz 三层架构 1.4 建action 相当于selvert 1.5 con连接MySQL 8.0 版本 1.6 配置文件 XML 1.7 主界面布局 1.8 增加界面布局 1.9 写tld配置文件 2.0 注意架包 我是已经打包好的 mymv…

Leetcode-每日一题【剑指 Offer 53 - I. 在排序数组中查找数字 I】

题目 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8输出: 2 示例 2: 输入: nums [5,7,7,8,8,10], target 6输出: 0 提示&#xff1a; 0 < nums.length < 105-109 < nums[i] < 109nums 是一个非递减数组-109 < targe…