Java system.getProperty问题

我发现在我的OSX系统上我有“怪异”的设置. Java将我的用户名读作“root”而不是我的实际用户名.原来我使用的代码使用System.getPropery(“user.name”)调用.所以,我编写了独立剪切(我将它保存在test.java下),它打印了java系统user.name属性和我的UNIX用户名环境:

class UserName {
public static void main(String[] args) {
   String name;
   name = System.getProperty("user.name");
   System.out.println("user.name="+name);
   name = System.getenv("USER");
   System.out.println("USER="+name);
}
}

如果我将其编译为javac test.java然后运行它(在我的帐户下,而不是root用户)作为java UserName,它将打印以下内容:

user.name=root
USER=vk

我的问题是java在哪里/如何设置user.name以及为什么将它设置为root而不是我的实际UNIX名称.我不是Java专家,也不知道System.getProperty API的内部.

第二个问题是可以在UNIX环境中以某种方式更改此设置,以便正确读取我的用户名.

最后可能是我的环境或java配置被破坏,并且有一些应该修复的隐藏文件(属性).

解决方法:

通过关闭java可执行文件中的setuid位解决了该问题.谢谢大卫康拉德的正确提示.供参考:

ls -l /usr/bin/java
-rwsr-xr-x ... /usr/bin/java
sudo chmod -s /usr/bin/java
lrwxr-xr-x ... /usr/bin/java

之后一切都报告得当.

上一篇:2021-03-13


下一篇:Properties集合类