基于XL-Deploy WAS扩展插件:为何需登录模块排序算法?
问题
基于官方was-plugin-extensions-22.3.1.xldp插件开发全新XL-Deploy插件时,已完成以下调整:
- 仅从官方插件
synthetic.xml中复制createScript、destroyScript、createVerb三个属性,其余属性通过继承was.SystemLoginConfiguration保留在XL-Deploy资源管理器中; - 修改原插件Jython脚本,将硬编码的登录类型"system"改为支持系统登录与应用登录,并在
synthetic.xml中添加对应用户输入参数; - 当前架构包含Deployment Manager、Node Agent及4台托管服务器,已将RMI_INBOUND与WEB_INBOUND配置文件设为部署项。
现存在疑问:既然这些配置文件是部署项,为何仍需要如下这段用于生成登录模块不同组合的排序算法代码?
# handle ordering. Get the possibly modified list first loginModules = AdminConfig.showAttribute(entry, "loginModules") allLoginModules = wsadminToList(loginModules) indexOfElementToMove = getIndexOfElementToMove(allLoginModules, deployed.className) print("index of element to move: " + str(indexOfElementToMove)) if deployed.moduleOrder < len(allLoginModules): # first cut out the object to move myPart = allLoginModules[indexOfElementToMove : indexOfElementToMove + 1] firstPart = allLoginModules[0:indexOfElementToMove] lastPart = allLoginModules[indexOfElementToMove + 1 :] oldList = firstPart + lastPart # now split up the old list at appropriate place firstPart = oldList[0 : deployed.moduleOrder - 1] lastPart = oldList[deployed.moduleOrder - 1 :] newList = firstPart + myPart + lastPart commaSeparatedClassnames = makeCommaSeparatedClassnames(newList) AdminTask.configureJAASLoginEntry("[-loginEntryAlias %s -loginType %s -loginModules %s ]" % (deployed.aliasName, deployed.loginType.lower(), commaSeparatedClassnames)) else: print("there was no need to re-order loginModules")
回答
这段排序代码的核心作用是确保JAAS登录模块的执行顺序严格符合部署需求,和配置文件作为部署项并不冲突,具体原因如下:
- JAAS认证逻辑依赖模块执行顺序:WebSphere中JAAS登录模块是按列表顺序依次执行的,先执行的模块会优先处理认证请求,后续模块的执行逻辑(比如是否继续认证、是否使用前序模块的凭证)完全依赖顺序。即使配置文件是部署项,也无法保证登录模块的顺序始终正确——比如新增模块后默认顺序不符合业务认证流程,或其他操作(手动修改、其他插件)改变了原有顺序。
- 部署项无法覆盖动态调整需求:部署项的作用是将配置文件推送至目标环境,但WebSphere的JAAS登录条目是运行时动态维护的。这段代码是在部署过程中主动校正顺序,确保每次部署后,目标登录模块都能被调整到
moduleOrder指定的位置,避免因顺序错误导致认证失败。 - 适配双登录类型的场景需求:插件已修改为支持系统登录与应用登录,两种登录类型对应的JAAS条目可能包含不同的登录模块组合。这段代码可以针对不同的
loginType,动态调整当前部署模块的位置,保证不同场景下认证流程的正确性。 - 兼容现有配置的增量调整:代码先通过
wsadminToList(loginModules)获取当前已有的登录模块列表,再调整目标模块的位置,属于增量调整而非完全覆盖。如果直接用部署文件覆盖,可能会丢失其他已配置的登录模块,而这段代码既保留了现有配置,又保证了目标模块的顺序符合要求。
内容的提问来源于stack exchange,提问作者Claudia Martins
相关产品推荐
相关产品推荐

