淄博建设公司网站,做网站应该掌握的技术,2021最新引流推广方法,dw2021网页设计教程本文讲解4.4版jxTMS中如何自行定义一个频率型的动态管控#xff0c;整个系列的文章请查看#xff1a;docker版jxTMS使用指南#xff1a;4.4版升级内容
docker版本的使用#xff0c;请查看#xff1a;docker版jxTMS使用指南
4.0版jxTMS的说明#xff0c;请查看#xff…本文讲解4.4版jxTMS中如何自行定义一个频率型的动态管控整个系列的文章请查看docker版jxTMS使用指南4.4版升级内容
docker版本的使用请查看docker版jxTMS使用指南
4.0版jxTMS的说明请查看4.0版升级内容
4.2版jxTMS的说明请查看4.2版升级内容
上篇文章中我们讲解了jxTMS的动态管控本文则展示一个自定义的频率型动态管控的实现。
如果开发者针对自己的需要也想实现某种频率型的管控可利用jxTMS内置的频率控制对象frequency。
引用
form jx.auth import frequency其构造函数为
class frequency:def __init__(self, checkItem, max10, checkPeriodSeconds60,exceedLimit100, exceedDualNone)#checkItem该频率管控的对象名如用户名、资源ID等#max上文中的限额#checkPeriodSeconds上文中的限制周期#exceedLimit上文中的超频数#exceedDual超频后的回调处理函数其函数签名为# exceedDual(checkItem)我们举个例子
class demoCheck:_accessFrequency {}classmethoddef frequencySet(cls, userName, max10, checkPeriodSeconds60,exceedLimit100, exceedDualNone):rl cls.__dict__[_accessFrequency]#此处设置了超频时的处置函数为本类的_exceedDual函数rl[userName] frequency(userName, maxmax, checkPeriodSecondscheckPeriodSeconds,exceedLimitexceedLimit, exceedDualcls._exceedDual)#用于上篇文章中所介绍的全面检查classmethoddef check_frequency_forSystem(cls, u, op, resID):fl cls.__dict__[_accessFrequency]#需要开发者自己来决定挑选哪些用户来执行自己的频率限制审查b needCheck(u,op,resID)if b:#根据业务需要执行频率检查f fl.get(u.name(),None)if f is None:#防止扫描return False,f[{u._name}]访问频率超过预期b f.check()if not b:return False,f[{u._name}]访问频率超过预期return True,None#用于上篇文章中所介绍的指定检查classmethoddef check_frequency_forMe(cls, myName, op, resID):fl cls.__dict__[_accessFrequency]f fl.get(myName,None)if f is None:#防止扫描return False,f[{myName}]访问频率超过预期b f.check()if b:return True,Nonereturn False,f[{myName}]访问频率超过预期#超频时的处置classmethoddef _exceedDual(cls, userName):#超频了踢出并阻止登录user.preventUser(userName)msg f用户【{userName}】操作过于频繁阻止12小时jxGo.log(warn,msg)根据自己的业务需要可随时通过执行下面的语句来添加自己的频率型动态管控
demoCheck.frequencySet(objName,...限额等参数...)对自己定义的该管控措施其可部署的检查点有两种
1、利用系统内置的卡控来统一触发通过执行
user.setDynamicallyCheck(自己的动态管控名,demoCheck.check_frequency_forSystem)不需再做其它任何处置系统即会自动在全面检查时调用demoCheck.check_frequency_forSystem函数来完成自己的频率型管控。
2、自己在业务操作过程中自行执行频率管控的检查通过执行
user.setDynamicallyCheck(自己的动态管控名,demoCheck.check_frequency_forMe)此种方式需手动触发动态管控的执行因此需再自己的业务处理函数中执行
...业务操作的预备动作
b,msg user.specialCheck(自己的动态管控名,currentUser,操作名,资源ID)
if not b:rm f用户[{currentUser.fullname()}]执行操作【{操作名}】未通过频率审查{msg}jxGo.log(warn, rm)return None,rm
...通过了频率管控的审查继续执行同时使用此种方式来调度自己定义的动态管控需要在系统统一调度时排除掉【自己的动态管控名】否则【自己的动态管控名】会在系统内置的卡控点被统一触发从而造成期望之外的审查可能会导致其它用户都被阻止
要避免此种情况的出现需执行
user.notDoDynamicallyCheck(自己的动态管控名)第一种方式属于全局执行所以check_frequency_forSystem要有一个识别用户的needCheck【自己定义】函数来进行用户的识别默认则是放行第二种方式属于针对性执行所以不需要用户的识别默认则是拒绝。
也正是由于后者是针对性执行所以必须调用notDoDynamicallyCheck将其从全局执行中剔除切切
超频后临时阻止用户
在demoCheck的frequencySet中设置了超频时的处理函数demoCheck._exceedDual。其利用了user类提供的preventUser函数来临时阻止超频的用户。
preventUser函数会将该用户临时加入到黑名单中【这会导致该用户立刻无法访问以及登录】默认12个小时后再自动将用户移出黑名单。这个临时阻止的时长可调
def preventUser(cls,userName,Hours12):即开发者在调用user.preventUser临时阻止用户时通过设置Hours可将该用户阻止对应的小时数【为了提高效率移出黑名单是由系统统一调度执行的所以具体的阻止时长大约是指定时长后的1小时左右即指定了10小时大约是在11个小时左右】。
参考资料
jxTMS设计思想
jxTMS编程手册
下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能
如何用jxTMS开发一个功能
下面的系列文章讲述了jxTMS的一些基本开发能力
jxTMS的HelloWorld