2009-06-16 74 views
0

通過在JBoss上運行的Java應用程序獲取當前登錄用戶的最佳方式是什麼?系統環境變量System.getProperty(「user.name」)不起作用,因爲JBoss作爲服務運行。Java系統環境變量當前用戶

該應用程序在運行Windows XP的筆記本電腦上運行。該應用程序是基於Web的,可以通過特定的Windows用戶使用Internet Explorer進行訪問。一次只能有一個Windows用戶登錄。應用程序需要知道哪個用戶已經登錄來執行基於角色的菜單和安全功能。所以客戶端(Internet Explorer)和服務器(JBoss)都運行在同一檯筆記本電腦上。目前,我們使用tasklist/v確定登錄用戶,然後解析輸出以查找特定進程以及運行它們的用戶。但是,需要知道是否有更簡單的方式來獲取已登錄的Windows用戶。

+0

你要查找的用戶名登錄到你的Web應用程序,也許?也許HttpServletRequest.getRemoteUser()是你在找什麼? – 2009-06-16 14:49:19

回答

3

我不認爲這個問題真的有道理。可能有沒有用戶登錄到主機 - 或者可能有多個用戶。

對於一個真正想知道這個設計的人來說,我會有點警惕--Web應用程序不應該真的對這樣的事情感興趣,IMO。你想做什麼?

+0

該應用程序在運行Windows XP的筆記本電腦上運行。該應用程序是基於Web的,可以通過特定的Windows用戶使用Internet Explorer進行訪問。一次只能有一個Windows用戶登錄。應用程序需要知道哪個用戶已經登錄來執行基於角色的菜單和安全功能。所以客戶端(Internet Explorer)和服務器(JBoss)都運行在同一檯筆記本電腦上。目前,我們使用tasklist/v確定登錄用戶,然後解析輸出以查找特定進程以及運行它們的用戶。 – 2009-06-16 15:37:00

+4

這對我來說似乎最好不是作爲服務運行,而是作爲「常規」應用程序啓動 - 此時相關用戶就是應用程序將運行的應用程序。 – 2009-06-16 16:02:25

0

這是假設你已經存儲在一個名爲USERNAME環境變量當用戶登錄:

String username = System.getenv("USERNAME"); 

或者,如果你想要一套完整的環境變量:

Map<String, String> envMap = System.getenv(); 

然後通過迭代映射以獲取您要存儲用戶名的環境變量。

Map<String, String> envMap = System.getenv(); 
int mapsize = envMap.size(); 
Iterator i = envMap.entrySet().iterator(); 
for (int j = 0; j < mapsize; j++) { 
    Map.Entry entry = (Map.Entry) i.next(); 
    Object key = entry.getKey(); 
    Object value = entry.getValue(); 
} 
0

使用JAAS認證。您應該能夠在Windows上使用NTLM,這樣用戶就不必做任何額外的工作。然後,在服務器上,您可以使用安全上下文來獲取調用者主體。

相關問題