如何获取HCL Domino远程控制台发送Tell命令的用户名称
针对Domino插件远程Tell命令用户身份获取的解决方案
核心思路
Domino在处理远程控制台的Tell命令时,会保留发起命令的用户身份信息,只是默认的session.getCommonUserName()因插件运行在服务器上下文返回服务器名称,需通过底层API或消息队列附加信息提取真实用户身份,以此实现权限限制。
具体实现方案
1. C/C++插件直接调用Domino C API
直接使用Domino C API中的OSGetConsoleUser函数,该函数可返回当前执行控制台命令的用户名。在自定义Addin的命令处理逻辑中调用此函数,就能获取发起Tell命令的远程用户名称,之后可与服务器文档安全群组做比对,完成权限控制。
2. Java插件通过JNI封装调用C API
若采用Java开发插件,因Java API未直接暴露该功能,需通过JNI桥接实现:
- 编写C语言的JNI桥接代码,内部调用
OSGetConsoleUser获取用户名 - 将编译后的本地库(.dll/.so)部署到Domino服务器对应目录
- 在Java插件中加载本地库并调用方法获取用户身份
3. 解析消息队列的附加信息
远程控制台发送的Tell命令会进入Addin的消息队列,通过NotesMessageQueue的GetMessage方法获取完整消息结构,其中dwData2字段可能包含发起用户的会话标识,结合NSFSessionGetUserName等API可提取用户名。此方式需熟悉Domino消息机制,兼容性可能受版本影响。
额外提示
- 测试时可分别在服务器本地控制台和远程控制台执行Tell命令,验证获取的用户身份是否准确
- 权限校验逻辑建议直接读取服务器文档的安全群组列表,通过Domino API的
isMember方法判断用户是否在授权群组内
内容的提问来源于stack exchange,提问作者Andy Brunner
相关产品推荐
相关产品推荐

