短篇小说:如何将 CRaSH shell 的 ssh 连接器中使用的用户名传递给自定义的 Java 方法?
不那么短的故事:我为 Spring 创建了一组自定义 shell 命令。身份验证是通过 ssh 连接器完成的,其中输入了用户名和密码,如下所示ssh foobarUsername@localhost -p 2000
。它进入 Spring 中的身份验证策略,并相应地通过或拒绝。
现在在被授权并进入 shell 之后,我需要获取用户名来运行一些功能。在这种情况下,我需要找出如何传递foobarUsername
到我创建的 java 方法中,这些方法@Command
使用BaseCommand
.
我的 Java 实现,后来由 CRaSH 的 groovy 脚本扩展:
public class FooCommand extends BaseCommand {
@Command
public void main(@Usage("do something")
@Required @Option(names = {"o", "option"}) String option) {
doSomething(option, username/* the username in ssh request*/);
}
}
ssh 连接器是这样的:
ssh foobarUsername@localhost -p 2000
更新:
默认情况下,我的 shell 命令的身份验证是由 Spring 自己的AuthenticationManager
. 在我通过 SSH 发送请求时,身份验证在 Spring 的会话中。然后它进入外壳,我尝试了我的任何一个命令。main()
通过在of 中设置断点FooCommand
,我发现应该有之前发送的身份验证请求的上下文已经消失了。显然,在我输入命令之前,接收、处理和返回身份验证的 Spring 会话已经结束。