# Angemeldeten Systembenutzer ermitteln



## foobar (3. Jul 2007)

Hi,

hat jemand eine Idee wie man aus Java den aktuell angemeldeten Systembenutzer ermitteln kann, der gerade das Programm ausführt? Wenn ich System.getProperty("user.name") verwende ist das nicht besonders sicher, da man diesen Wert über java -Duser.name manipulieren kann. Gibt es noch ne andere Möglichkeit oder kennt jemand eine API, die sowas ermöglicht?

Viele Grüße,
foobar


----------



## Wildcard (4. Jul 2007)

Vielleicht JAAS?
http://java.sun.com/products/jaas/


----------



## JPKI (4. Jul 2007)

Vielleicht verschiedene MXBeans?
Schau mal hier nach!


----------



## foobar (5. Jul 2007)

Danke für die Tips, aber ich habe immer noch nicht das richtige gefunden. 
Ich brauche eine API, die mir auch alle verfügbaren User des Systems auflistet. Am besten direkt mit allen Details wie Homedir etc. Kennt jemand sowas?


----------



## JPKI (6. Jul 2007)

Das ist ja Windowsspezifisch. Sowas musst du dir wohl selbst in C(++) schreiben!


----------



## tuxedo (6. Jul 2007)

Du könntest manipulationsversucht mit KOmmandozeilenoptionen versuchen zu umgehen in dem du mit diversen Tools aus deiner Jar ein Executable machst... Dann wird dein Programm ausschließlich mit den Argumenten gestartet die du zuvor definiert hast.

Tools um eine Jar in eine EXE zu packen: SuFu oder Google


----------



## Wildcard (7. Jul 2007)

@JPKI
Was soll daran WIndowsspezifisch sein? Haben andere Betriebsysteme etwa keine Benutzer? 

@foobar
Deine zweite Anforderung deckt sich nicht mit der ersten.
Für dein erstes Problem könntest du folgendes Versuchen:
user.home Abfragen und versuchen dort zu schreiben. Wenn das funktioniert ist der User vermutlich der für den er sich ausgibt.
Zum Zweiten:
Du könntest user.home abfragen, ins Parent Verzeichnis wechseln und dort die Verzeichnisse auslesen.

Beides wird nicht in allen Fällen funktionieren, aber mehr fällt mir gerade nicht ein.
Vielleicht solltest du auch erwähnen für welches Betriebssystem es gedacht ist.


----------



## kleiner_held (7. Jul 2007)

eine Idee die ich grad hatte:

```
public class XYZ
{
    public static void main(String[] args)
    {
        System.out.println("My user name:");
        ABC.main(args);
        System.out.println("Fork VM user name:");
        try
        {
            System.out.println(check());
        } 
        catch (Exception e)
        {
            e.printStackTrace();
        }        
    }

   public static String check() throws Exception
   {
       ProcessBuilder pb = new ProcessBuilder(
               System.getProperty("java.home")+"/bin/java",
               "-cp",
               System.getProperty("java.class.path"),
               ABC.class.getName());
       Process p = pb.start();

       StringBuilder output = new StringBuilder();
       char[] buffer = new char[100];
       BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
       
       for (int count = reader.read(buffer); count > -1; count = reader.read(buffer))
       {
           output.append(buffer, 0, count);
       }
       
       p.waitFor();
       
       return output.toString();
   }
   
   public static class ABC
   {
       public static void main(String[] args)
       {
           System.out.println(System.getProperty("user.name"));
       }
   }
}
```

kann man sicherlich auch manipulieren, hilft aber wenigstens gegen ein einfaches -Duser.name und sollte OS unabhängig sein.


----------



## foobar (7. Jul 2007)

Danke für eure Ideen 

Also das ganze ist eine Eclipse RCP-Anwendung, die primär unter Windows laufen soll und Linux laufen soll. MacOS X ist aber auch nicht ausgeschlossen. 
Eclipse RCP hat ja auch nen eigenen nativen Starter dabei, da muß ich mal forschen in wie weit man da etwas konfigurieren kann. Da ich ja aber sowieso eine API für das Auslesen der Benutzer brauche, werde ich um JNI nicht rum kommen. Denn bisher habe ich noch keine API gefunden, die soetwas in Java für Windows, Linux und Mac zur Verfügung stellt.
Wir möchten in unserer Anwendung dem User bzw. Administrator der Software eben die Möglichkeit geben einem User aus unserer Userverwaltung einen Systemuser zu zu weisen. Damit man sich, wenn ein Systemuser vorhanden ist, nicht wiederholt anmelden muß. Deshalb brauche ich eine API, die mir plattformunabhängig alle Benutzer auflistet, damit ich diese dann in meiner Verwaltung zuweisen kann.


----------

