小故事:如何将用于CRaSH shell的ssh连接器的用户名传递给定制的Java方法?不太短的故事:我为Spring创建了一组自定义shell命令。身份验证通过ssh连接器完成,输入用户名和密码,如ssh [email protected] -p 2000
。它在Spring中进入认证策略,并相应通过或拒绝。在Spring引导中使用CRaSH命令获取用户名
现在经过授权并进入shell之后,我需要获取usename来运行一些函数。在这种情况下,我需要找出如何将foobarUsername
传递到我创建的java方法中,该方法使用@Command
注释并使用BaseCommand
扩展。
我的Java实现,这是后来被一个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 [email protected] -p 2000
更新: 默认情况下,我的shell命令的认证是由Spring自己的AuthenticationManager
完成的。当我通过SSH发送请求时,身份验证在Spring的会话中进行。然后它进入shell,我尝试了我的任何一个命令。通过在FooCommand
的main()
中放置一个断点,我发现应该具有之前发送的认证请求的上下文已经消失。很显然,接受,处理和返回认证的Spring会话在我输入命令之前就已经结束了。
谢谢,Mateusz! –
@JerryYeh如果它适合你,请接受这个答案,以便将来搜索这个的人 – Mateusz
不幸的是,我不再在该项目上工作,所以无法再访问它。 :( –