Javaシステム環境変数現在のユーザー
-
05-07-2019 - |
質問
JBossで実行されているJavaアプリケーションを使用して、現在ログインしているユーザーを取得する最良の方法は何ですか。 JBossがサービスとして実行されているため、システム環境変数System.getProperty(" user.name")は機能しません。
アプリケーションは、Windows XPを実行しているラップトップで実行されています。このアプリケーションはWebベースであり、特定のログインしたWindowsユーザーがInternet Explorerを使用してアクセスします。一度にログインできるWindowsユーザーは1人だけです。アプリケーションは、ロールベースのメニューとセキュリティ機能を実行するために、どのユーザーがログインしたかを知る必要があります。そのため、クライアント(Internet Explorer)とサーバー(JBoss)の両方が同じラップトップで実行されています。現在、tasklist / vを使用してログインしているユーザーを特定し、出力を解析して特定のプロセスとそれらを実行しているユーザーを探します。ただし、ログインしたWindowsユーザーを取得するよりクリーンな方法があるかどうかを知る必要があります。
解決
質問が本当に意味をなさないと思います。ホストにログオンしているユーザーがいない か、複数のユーザーがいる可能性があります。
とにかくこれを本当に知りたいと思ったデザインには多少警戒するでしょう-WebアプリケーションはIMOのようなものに本当に興味を持ってはいけません。何をしようとしているのですか?
他のヒント
String uname = System.getenv(" user.name")
リファレンス: http://download.oracle.com/javase/ tutorial / essential / environment / sysprop.html
これは、ユーザーがログインしたときに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();
}
JAAS認証を使用します。 WindowsでNTLMを使用できるようにする必要があります。これにより、ユーザーは追加の作業を行う必要がなくなります。次に、サーバー上でセキュリティコンテキストを使用して、呼び出し元プリンシパルを取得できます。