要获取Java程序中当前用户的名称,您可以simply fetch the value of the user.name
system property:
System.getProperty("user.name");
但那有多安全?对于常见的运行时环境,执行程序的用户是否可以轻松地将此属性设置为任意值(例如,使用JVM的命令行参数)?用户可以轻易欺骗此用户名吗?
我问,因为我正在编写一个可由任何人运行的命令行程序,但只有在用户是特殊管理用户时才允许某些特权操作。
请注意,自Java 11以来,只有在程序启动时才会有效读取user.name
属性,因此恶意程序代码无法欺骗它。
答案 0 :(得分:7)
是的,如果用户可以自由启动应用程序,则此值可能会被“欺骗”,并且无法依赖。
只需使用JVM arg -Duser.name=someothername
启动应用即可使System.getProperty("user.name")
返回该值。
答案 1 :(得分:0)
对于任何可能再次降落的人来说:
使用cmd-command whoami
并使用this post阅读输入应该是一种更安全的方式,使用用户名作为"验证"。
除此之外,这也可能是欺骗性的,对于cmd命令而言可能比对JVM参数更难......