2009-07-16 89 views
1

我目前正在編寫一個Java應用程序,用於與ActiveDirectory驗證的Windows計算機。應用程序基本上只需要知道用戶的名稱和主機名。我知道有在Windows中檢索登錄用戶的名稱和主機名稱

System.getProperty("user.name")

java.net.InetAddress.getLocalHost().getHostName()

但我不知道閹System.getProperty( 「user.name」)將與Windows上運行的虛擬機正常工作(我搜索谷歌,並發現很多線程說,它可能可能不適用於Windows,因爲它可能會返回不同的東西,取決於環境變量 (我目前無法測試它[我運行的Ubuntu和一個rchLinux])。

所以,我想知道是否有更好更安全的方法來處理這個問題,並偶然發現NTSystem。 但是NTSystem似乎並沒有在Linux上使用(我用它來開發),我認爲這是因爲調用了本地windows代碼。

因此,我的問題是:「是否有一種安全的方式來檢索Windows中登錄的用戶名,如果是 - 您將如何實現?」

+0

user.name應該與平臺無關,但運行一個測試程序並親自查看。 – akarnokd 2009-07-16 08:40:18

+0

但是任何人都可以通過-Duser.name = XYZ覆蓋它,所以它本質上是不安全的 – 2009-07-16 08:47:08

回答

1

user.name固有不安全,因爲它可以通過-Duser.name=XYZ覆蓋。這可能是你的問題,或者它可能不是

很明顯NTSystem在Linux上不起作用,但你提到你正在編寫一個GUI來在Windows上運行。你想驗證用戶的Windows用戶名嗎?您可以通過嵌入中的NTSystem來實現,該代碼在Windows客戶端上運行,但是而不是(當然)在Linux OS下運行的代碼。

或者你想在Linux服務器上驗證它們嗎?也許你有一個kerberos域,你可以做到這一點? (即如果有kerberos域,那麼你可以有客戶端和服務器之間的安全,認證的通信,確保客戶是誰,他們說他們是)

編輯我可以通過這樣的事實混淆你在說你正在編寫一個Java應用程序「在Linux中」。我認爲這是一個Linux服務器和Windows客戶端 - 但可能你只是說你使用Lenux作爲你的開發環境?在這種情況下,你可能會認爲寫,你可以使用NTSystem在Windows中,並user.name之間測試

1

使用JNA切換可插拔識別層,com.sun.platform.jna.win32有許多方法做這個包裝Win32 API。試試Advapi32Util.getUserName或Kernel32Util.getUserNameEx。

相關問題