# Windows User != Server User auslesen



## schmalhans (7. Okt 2005)

Hmm...

ich stoß seit geraumer Zeit auf ein unschönes Problem und zwar folgendes:

Ich habe auf einem externen Server eine WebApplikation laufen und beim Login möchte ich, dass
der Username ausgelesen wird, damit es der User nicht selbst eintragen muss.

Ich habe das mit


```
String winuser = System.getProperty("user.name");
```

probiert. Nur da diese Applikation auf dem Server läuft und nur über Internet Explorer aufgerufen wird, zeigt
er mir hier den Serveruser an und nicht den User der von seinem System aus die App aufruft.

Habe es auch mit


```
String winuser = request.getUserPrincipal().getName();
```

probiert. Funktioniert auch nicht.

Finde im API/Internet immer nur den Verweis auf meine 1. Lösung, welche ja nicht funktioniert.


Wie kann ich das umsetzen?

Gruß
schmalhans


----------



## Mag1c (7. Okt 2005)

Hi,

Cookies und evtl. ein bisschen JavaScript ?

Gruß
Mag1c


----------



## schmalhans (7. Okt 2005)

bin kein wirklicher Fan von JS.
Wäre mir lieber wenn man das irgendwie anders hinkriegt.

ist request.getRemoteUser() eine Lösung? Oder zeigt die wieder was anderes an?
[edit]ok .getRemoteUser() ist keine Lösung. Funktioniert nicht[/edit]


hat jemand ne idee?


----------



## Bleiglanz (8. Okt 2005)

man kann auf dem Server normalerweise nicht den lokalen Benutzernamen eines Clients abfragen

welche Clients hast du? WIN??

dann google mal nach "Single-Sign-On Java", das ganze ist nicht so einfach, weil man die NTLM-Funktonen des IE ausnutzen muss...


```
String winuser = request.getUserPrincipal().getName();
```
Das geht erst NACH erfolgreicher Authentifizierung


----------



## schmalhans (10. Okt 2005)

ja meine Clients sind alles WIN.

es müsste doch ne möglichkeit geben die win-variable "username" vom client auszulesen?

mit dem single-sign-on java google hab ich nix passendes gefunden.


----------



## Bleiglanz (10. Okt 2005)

>>es müsste doch ne möglichkeit geben 
>>die win-variable "username" vom client auszulesen? 

Nein, das sollte es ÜBERHAUPT nicht geben, denk mal drüber nach

Du brauchst ein Modul, das den Kerberos / NTLM (oder NTLMv2 oder wie das heisst) Authentifizierungs-Handshake-Tanz mit dem InternetExplorer abwickeln kann, das geht so ohne weiteres nicht

Das ganze ist recht kompliziert:

http://www.microsoft.com/germany/technet/datenbank/articles/900325.mspx

und möglicherweise brauchst du eine kommerzielle Lib, z.B.

http://bofriis.dk/

hab allerdings keine Ahnung wie gut sowas funktioniert!


----------



## Oskar (10. Okt 2005)

Tach

mal ein anderer Vorschlag wobei ich nicht weiss ob das nicht auf den Holzweg führt.

Wenn es sich bei der Server Applikation machen lässt dann bau doch eine Art Applet ein (wenn es eine Page ist, wenn nicht musst du den download und das Ausführen anders triggern).

Übergebe der Client applikation eine eineindutige Kennung die genau dieser einen Session auf dem Server zu geordnet ist. Mit der Client App solltest du dann ja den Benutzernamen auslesen können und dann schickst du ihn wieder gemeinsam mit der Id an den Server zurück.

Wie gesagt ist nur eine schnelle Idee wie ich versuchen würde das zu machen.


----------



## schmalhans (10. Okt 2005)

oha, das klingt gar nicht mal verkehrt.

habe auch schon in die richtung gedacht. nur nicht ganz so weit. werde das mal probieren.


----------



## Mag1c (10. Okt 2005)

Hi,

da wäre die JavaScript-Variante wahrscheinlich einfacher gewesen (größere Akzeptanz, performanter als Applet).

Gruß
Mag1c


----------



## Bleiglanz (10. Okt 2005)

Hmm


> For security reasons, no existing browsers or applet viewers let applets read the following system properties.
> 
> "java.class.path"	Java classpath
> "java.home"	Java installation directory
> ...


Ob man mit Javascript wohl den "user.name" rauskriegen kann?


----------



## Bleiglanz (10. Okt 2005)

Ach ja: 

was würde mich hindern, schnell einen Windows-Stand-Alone Host aufzusetzen, einen Benutzer einzurichten der genauso heisst wie mein Vorgesetzter und dann mit dem IE auf die Seite zu gehen?

so richtig gut ist das alles nicht, es würde für eine automatische  Anmeldung doch nicht ausreichen, einfach die Java System Property "user.name" zu verwenden?

Nochwas: welchen externen Server hast du denn? Wenn das zufällig BEA, Oracle oder Websphere ist - die sollten SSO schon beherrschen?


----------



## schmalhans (10. Okt 2005)

ja JS wäre da wohl das beste.
Gibs da ne möglichkeit? me ist JS-noob


@bleiglanz: die server hören auf den schönen namen oracle. SSO ist nich so ganz einfach


----------



## Mag1c (10. Okt 2005)

Habe eben mal ein wenig gegoogelt ... es scheint also auch unter JS keine Möglichkeit zu geben. Hab jedenfalls eine Reihe von JS-Seiten besucht, die alles mögliche über mein System angezeigt haben ... nur eben den Usernamen nicht.

Vielleicht solltest du dich doch darauf beschränken, den Usernamen in einem Keks zu speichern. Dann müssen die User den Namen genau einmal eingeben und danach nicht mehr.

Gruß
Mag1c


----------



## schmalhans (10. Okt 2005)

Hmm....

kann mich mit der Keks-Backerei in diesem Fall nicht ganz zufrieden geben. Wäre zwar aus technischen Grund eigentlich ausreichend, würde aber einfach aus Neugierde gern nen anderen Weg finden.

Werd mal weitersuchen. Danke für eure Anregungen wenn jemand noch Ideen hat: immer raus damit! 

Gruß
schmalhans


----------



## Bleiglanz (10. Okt 2005)

auf dem Oracle OAS gibts auf jeden Fall ein SSO Modul, keine Ahnung ob das mit dem Active Directory abgeglichen werden kann

wenn ihr keine Windows-Domäne habt, dann würde ich das ganze canceln und jeden User selbst einloggen lassen.

P.S.: ist die Benutzerdatenbank irgendwie mit der Domäne abgeglichen? Welchen Sinn hat es, wenn man den lokalen Usernamen "automatisch" verwendet?


----------



## schmalhans (10. Okt 2005)

also kurz mal zur erklärung,

es geht nicht um den sso, hab ich eigentlich auch nie erwähnt. sorry wenn ich mich hier falsch ausgedrückt habe.   

ich möchte nur bei meiner webapplikation den win-username auslesen und den in das loginfeld schreiben, so dass der user nur noch sein pw in das pw-feld schreiben muss. also nur komfort.


----------



## schmalhans (10. Okt 2005)

Was macht eigentlich request.getRemoteUser() genau?


Weil das liefert mir "null" zurück. wäre das nicht ne möglichkeit?


----------



## Bleiglanz (10. Okt 2005)

nein hab ich doch schon gesagt: das geht erst NACH der Authentifizierung

ums kurz zu machen: was du willst geht nicht - oder nur mit grossem Aufwang - also vergiss die Idee


----------



## KSG9|sebastian (10. Okt 2005)

ich weiß auch net wirklich, was das ganze mit komfort zu tun hat ...

Ich tippe lieber kurz meinen Benutzernamen ein, als dass ich auf irgendein bescheidenes Applet oder nen JavaScript warten muss, welcher zuletzt noch blockiert wird


----------



## schmalhans (10. Okt 2005)

hehe,

da muss ich 2 wohl recht geben. 
Dachte nur ich frag mal nach, bevor ich es gleich abhake oder ewig danach google.

werde das nun auch ganz rausnehmen.

Danke an alle die ihre Ideen gepostet haben! Und danke für die Geduld, Bleiglanz. 

Gruß
schmalhans


----------

