Java 현재 컴퓨터 이름과 로그인 한 사용자?


153

현재 로그인 한 사용자 이름 (Windows / Unix)과 시스템의 호스트 이름을 얻을 수 있습니까?

정적 환경 클래스의 속성 일 뿐이라고 가정합니다.

사용자 이름으로 찾았습니다

com.sun.security.auth.module.NTSystem NTSystem = new
        com.sun.security.auth.module.NTSystem();
System.out.println(NTSystem.getName());

그리고 이것은 머신 이름을 위해 :

import java.net.InetAddress;
...
String computerName;
...
try {
    computerName = InetAddress.getLocalHost().getHostName();
}

catch(Exception ex) {
    ...
}

첫 번째는 Windows 전용입니까?

호스트 이름이 설정되지 않은 경우 두 번째는 무엇을합니까?


NTSystem수업은 WindowsJDK 배포 에만 존재합니다
BullyWiiPlaza

답변:


256

현재 로그인 한 사용자를 얻으려면 :

System.getProperty("user.name"); //platform independent 

머신의 호스트 이름 :

java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
System.out.println("Hostname of local machine: " + localMachine.getHostName());

1
System.getProperty("user.name"); 윈도우와 리눅스 모두 에서 작동 합니까 ?
메기

5
그러나이 user.name은 스푸핑 될 수 있으므로 인증시 사용해서는 안됩니다.
Raedwald

14
System.getProperty ( "user.name")은 현재 로그인 한 사용자가 아니며 보안 컨텍스트에서 JVM을 실행중인 사용자입니다.
rkosegi

1
OP가 "컴퓨터 이름"또는 "컴퓨터 이름"이라고하는 것은이 답변이 잘못되었습니다. Java는 "컴퓨터 이름", 즉 부팅 프로세스 초기에 컴퓨터에 할당되고 네트워크와 관련이없는 이름을 얻을 수있는 방법이 없습니다. 모든 OS에는이 개념이 있지만 불행히도이 값은 Java에 노출되지 않습니다. 그러나 항상 그런 것은 아니지만 종종 위의 방법은 실제로 컴퓨터 이름을 반환합니다. 설명 은 stackoverflow.com/a/40702767/1504556 을 참조하십시오 .
peterh

91

현재 로그인 한 사용자를 얻으려면 :

System.getProperty("user.name");

기계의 호스트 이름을 얻으려면 다음을 수행하십시오.

InetAddress.getLocalHost().getHostName();

질문의 마지막 부분에 대답하기 위해 Java API 는 getHostName ()이

이 IP 주소의 호스트 이름 또는 보안 검사에서 조작이 허용되지 않는 경우 IP 주소의 텍스트 표현.


모든 OPs 원래 질문 표시 줄에 명확하고 간결하게 답변합니다. 틀림없이 이것이 정답
Andy

1
@Andy에 동의하십시오-모든 투표에 대한 명확하고 간결한 답변을 위해 투표하십시오.
Paul Eden

9

user.name환경 변수가 위조 될 수 있으므로 사용 이 안전하지 않습니다. 사용중인 방법이 좋으며 유닉스 기반 OS에도 비슷한 방법이 있습니다.


그래서이 입니다 단지 Windows 용? 이 작업을 수행 하는 플랫폼 독립적 인 방법이 있습니까?
스튜어트 R. 제프리스

7
시스템 속성은 환경 변수가 아닙니다. 환경 변수에 System.getenv ( "USER")를 사용하십시오. java.Duser.name = someoneelse를 사용하여 Java 명령 행에서 사용자가 System.properties를 여전히 설정할 수 있으므로 여전히 안전하지 않습니다
dan carter

"유닉스 기반 OS에도 비슷한 방법이 있습니다": 고마워요. 그렇다면이 OS의 방법은 무엇입니까? 내 연구는 현재 나를 수행 ... ... : "whoami"를 사용하여?
pdem

죄송 스팸, 나는 C에서 솔루션의 종류를 제공하기 위해 여기 온 : stackoverflow.com/questions/1451825/...을 그러니까 기본적으로, 우리는 C 코드 중 하나 WHOAMI 또는 JNI 사용해야합니다 "getpwuid을 (getuid ())" . 더 이상 UnixSystem 클래스가 없습니다.
pdem

0

현재 로그인 한 사용자 경로를 얻으려면

System.getProperty("user.home");
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.