jSP Daten aus AD auslesen, Variable verstecken

Hm
folgendes Problem

Ich möchte dass ein User auf einen Link klickt, eine Seite im Intranet aufgeht und automatisch seine E-Mail-Adresse in dem dann eröffneten Feld schon voreingetragen wird.

Am elegantesten wäre, wenn ich per JSP-Seite irgendwie auf seine Windows-Anmeldung zugreifen und seine E-Mail Adresse auslesen könnte.
Geht das ?

Die zweite Lösung, ist dass jeder User einen Link auf zB seinem Desktop hat. Dieser Link ruft die Seite auf und gibt als Variable die E-Mail mit. Allerdings möchte ich verhindern, dass dann jemand besonders schlaues hingeht, die E-Mail-Adresse in der Adresszeile ändert und so im Namen eines Kollegen Mist baut. Wie kann ich also den Links so anezeigen, dass keiner der Benutzer die Möglichkeit hat zu sehen, wie der eigentliche Seitenaufruf aussieht und diesen ändern kann ??

Das letzte was mir einfällt, ist dass jeder User auf dem Desktop ne Datei liegen hat, in der seine E-Mail Adresse drinsteht. Diese würde ich dann von der JSP-Seite aus auslesen.

So nun habe ich viele Ideen, keine Ahnung ob oder gar wie ich diese verwirklichen kann. Hilft mir jemand ?

Danke
lisa

Hallo,

Ich möchte dass ein User auf einen Link klickt, eine Seite im
Intranet aufgeht und automatisch seine E-Mail-Adresse in dem
dann eröffneten Feld schon voreingetragen wird.

Du möchtest also identifizieren, wer den Link klickt?
Da es sich um ein Intranet handelt, ist vermutlich ein ADS vorhanden.
Wenn ein user Deinen Link anlickt, liefert er seinen Benutzernamen schon mit. Den solltest Du dann mithilfe von ldap auslesen können und somit auch die email-Adresse bekommen.

Hilft Dir das schon weiter?

Gruß, Stephan

Hallo Stephan,
ldap/AD ist auch mein Gedanke gewesen, leider habe ich programmiertechnisch keine Ahnung, wie ich das umsetzen soll ?
ich hab ne JSP Seite in die ich das integrieren müsste

Hallo Stephan,
ldap/AD ist auch mein Gedanke gewesen, leider habe ich
programmiertechnisch keine Ahnung, wie ich das umsetzen soll ?
ich hab ne JSP Seite in die ich das integrieren müsste

weißt du denn, wie du den user über ntlm bekommst?
Über NTLM solltest Du den User bekommen, den Du dann für die ldap-Suche benutzt.
Sagt dir jndi etwas?
Du musst Dir einen DirectoryContext holen. Über den wird die Suche abgesetzt.
Wieviel weißt Du denn von java?
Dann weiß ich, wie detailiert ich antworten muss :smile:

Gruß, Stephan

Ich möchte dass ein User auf einen Link klickt, eine Seite im
Intranet aufgeht und automatisch seine E-Mail-Adresse in dem
dann eröffneten Feld schon voreingetragen wird.

Warum? Was ist der Sinn hinter dieser Anforderung? Können sich Deine Benutzer ihre E-Mail Adressen nicht merken?

Am elegantesten wäre, wenn ich per JSP-Seite irgendwie auf
seine Windows-Anmeldung zugreifen und seine E-Mail Adresse
auslesen könnte.
Geht das ?

Speichert LDAP überhaupt eine E-Mail Adresse?

Die zweite Lösung, ist dass jeder User einen Link auf zB
seinem Desktop hat. Dieser Link ruft die Seite auf und gibt
als Variable die E-Mail mit. Allerdings möchte ich verhindern,
dass dann jemand besonders schlaues hingeht, die
E-Mail-Adresse in der Adresszeile ändert und so im Namen eines
Kollegen Mist baut. Wie kann ich also den Links so anezeigen,
dass keiner der Benutzer die Möglichkeit hat zu sehen, wie der
eigentliche Seitenaufruf aussieht und diesen ändern kann ??

Vermutlich gar nicht. Aber wenn Du verrätst was Du damit bezwecken willst, gibt das evtl. nen Denkanstoß.

Das letzte was mir einfällt, ist dass jeder User auf dem
Desktop ne Datei liegen hat, in der seine E-Mail Adresse
drinsteht. Diese würde ich dann von der JSP-Seite aus
auslesen.

Und daß er die dann ändern verhinderst Du wie?

So nun habe ich viele Ideen, keine Ahnung ob oder gar wie ich
diese verwirklichen kann. Hilft mir jemand ?

Du solltes wirklich einmal sagen, wofür Du das brauchst. Alle Deine Ansätze sind Overhead und / oder fieses Gehacke. Aber eine brauchbare Lösung kann man nicht nennen, wenn Du nicht verrätst worum es geht.

Ich möchte dass ein User auf einen Link klickt, eine Seite im
Intranet aufgeht und automatisch seine E-Mail-Adresse in dem
dann eröffneten Feld schon voreingetragen wird.

Warum? Was ist der Sinn hinter dieser Anforderung? Können sich
Deine Benutzer ihre E-Mail Adressen nicht merken?

Möglicherweise dürfen sie Daten nur mit Ihrer Email-Adresse einsehen/ändern - z.b. für Umfragen/Feedback/Bewertungen.
Da ist eine eindeutige und unveränderbare Zuordnung durchaus sinnvoll.
Außerdem geht es hier nicht darum, Anforderungen in Frage zustellen, sondern bei deren Umsetzung Hilfestellung zu geben.

Am elegantesten wäre, wenn ich per JSP-Seite irgendwie auf
seine Windows-Anmeldung zugreifen und seine E-Mail Adresse
auslesen könnte.
Geht das ?

Speichert LDAP überhaupt eine E-Mail Adresse?

Nein! LDAP ist ein Prokoll und Protokolle sind bekanntlich für Übertragung von Daten und nicht für deren Speicherung zuständig.

So nun habe ich viele Ideen, keine Ahnung ob oder gar wie ich
diese verwirklichen kann. Hilft mir jemand ?

Du solltes wirklich einmal sagen, wofür Du das brauchst. Alle
Deine Ansätze sind Overhead und / oder fieses Gehacke. Aber
eine brauchbare Lösung kann man nicht nennen, wenn Du nicht
verrätst worum es geht.

Ich habe bereits eine Lösung auf meinem Server laufen. Der User identifiziert sich über seinen Domain-Account, anschließend wird der ermittelte User aus der Authentifizierung für eine LDAP-Suche benutzt, um aus einem ADS (da sind solche Daten tatsächlich gespeichert) die Email-Adresse zu ermitteln.
Also Lisa, wenn das der Ansatz ist, den Du brauchst, dann meld Dich per Email. Dann lass ich Dir meine Lösung zukommen und kann sie Dir auch noch etwas erklären, sofern notwendig.

Gruß, Stephan

Außerdem geht es hier nicht darum, Anforderungen in Frage
zustellen, sondern bei deren Umsetzung Hilfestellung zu geben.

Ich habe gefragt wie die Anforderungen aussehen, um eine inhaltlich möglichst richtige Antwort zu geben. Wenn der Konsens hier aber von vorn herein schon lauten soll, daß die Idee egal wie ungeschickt und unsinnig sie ist mit aller Gewalt durchgesetzt werden soll, ohne sich die Frage zu stellen, ob ein anderer Ansatz sinniger wäre, dann bitteschön. Viel Spaß damit.
Derartigen Unfug, wie Dein Satzt hier aussagt, höre icht täglich von Typen die im Management tätig sind, und keinerlei Ahnung von der Thematik haben, mit der Brgründung ‚Ich will das aber so!‘.

Hallo Stephan,
sorry erst mal, dass ich erst jetzt antworte, deine Ansätze hören sich gut an.
Was ich will ist folgendes:
Ich habe eine auf JSp-Basis programmierte Seite, die auf eine Datenbank und eine darauf laufende Anwendung zugreift. Prinzipiell kann jeder Nutzer sich auf der Anmeldeseite mit seiner E-Mail anmelden und greift dann auf genau seine Daten zu. Wenn er noch keinen Account mit seiner E-Mail hat, wird diese gegen die Datenbank geprüft und ggf. ein neuer Account automatisch angelegt.

Nun ist aber gewünscht, dass die User sich nicht extra an der Seite anmelden müssen, weil das wohl die Akzeptanz erhöhen soll (Single Sign On).

Ich selbst bin kein Programmierer, sondern mache das alles Learning bei Doing, die Seite (ohne Single Sign on) habe ich hinbekommen. Nun würde ich gerne mehr oder weniger sagen:
Wenn jemand diese Seite aufruft, dann lese aus dem AD die E-Mail Adresse des AD-Accounts aus und fülle die Variable EMail mit dieser Adresse. Dann könnte mein Programm „einfach“ weiterarbeiten.

Ich hatte nicht vor, hier solche Diskussionen auszulösen ?

Gruß
Lisa

Ich hatte nicht vor, hier solche Diskussionen auszulösen ?

ich auch nicht, aber es nervt, wenn jemand nur nörgelt, anstatt konstruktiv bei der Lösung zu helfen…
hier also mein Vorschlag:
LDAP

public class LDAPClient {
 private String mail = "";
 private String user = "";


 public LDAPClient(String user){
 this.user = user;
 }

 public void search(String uid) {
 Hashtable env = new Hashtable();

 env.put(Context.INITIAL\_CONTEXT\_FACTORY,
 "com.sun.jndi.ldap.LdapCtxFactory");
 env.put(Context.PROVIDER\_URL, "ldap://ad-service:389");
 env.put(Context.SECURITY\_AUTHENTICATION, "none");
 DirContext ctx = null;
 NamingEnumeration results = null;
 try {
 ctx = new InitialDirContext(env);

 SearchControls constraints = new SearchControls();

 constraints.setSearchScope(SearchControls.SUBTREE\_SCOPE);
 constraints.setCountLimit(222);
 constraints.setTimeLimit(0);

 String name = "ou=people,o=company,ou=corp";
 NamingEnumeration answer = ctx.search(name, "(uid="
 + uid + ")", constraints);
 while (answer.hasMore()) {
 SearchResult sr = (SearchResult) answer.next();
 mail = (String) (sr.getAttributes().get("mail")).get();
 }
 } catch (NamingException e) {
 throw new RuntimeException(e);
 } finally {
 if (results != null) {
 try {
 results.close();
 } catch (Exception e) {
 }
 }
 if (ctx != null) {
 try {
 ctx.close();
 } catch (Exception e) {
 }
 }
 }
 }
 public String getMail() {
 search(this.user);
 return mail;
 }
 public void setUser(String user){
 this.user = user;
 }
}

Servlet

public class MyServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;

 protected void doGet(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException {
 String auth = request.getHeader("Authorization");
 if (auth == null) {
 response.setStatus(response.SC\_UNAUTHORIZED);
 response.setHeader("WWW-Authenticate", "NTLM");
 response.flushBuffer();
 return;
 }
 if (auth.startsWith("NTLM ")) {
 byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth
 .substring(5));
 int off = 0, length, offset;
 if (msg[8] == 1) {
 byte z = 0;
 byte[] msg1 = { (byte) 'N', (byte) 'T', (byte) 'L', (byte) 'M',
 (byte) 'S', (byte) 'S', (byte) 'P', z, (byte) 2, z, z,
 z, z, z, z, z, (byte) 40, z, z, z, (byte) 1,
 (byte) 130, z, z, z, (byte) 2, (byte) 2, (byte) 2, z,
 z, z, z, z, z, z, z, z, z, z, z };
 response.setHeader("WWW-Authenticate", "NTLM "
 + new sun.misc.BASE64Encoder().encodeBuffer(msg1));
 response.sendError(response.SC\_UNAUTHORIZED);
 return;
 } else if (msg[8] == 3) {
 off = 30;

 length = msg[off + 17] \* 256 + msg[off + 16];
 offset = msg[off + 19] \* 256 + msg[off + 18];
 String remoteHost = new String(msg, offset, length);

 length = msg[off + 1] \* 256 + msg[off];
 offset = msg[off + 3] \* 256 + msg[off + 2];
 String domain = new String(msg, offset, length);

 length = msg[off + 9] \* 256 + msg[off + 8];
 offset = msg[off + 11] \* 256 + msg[off + 10];
 String username = new String(msg, offset, length);
 StringBuffer sb = new StringBuffer();
 for (int i = 0; i " + s.getMail()
 + "");

 }
 }
 }

 protected void doPost(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException {
 }

}

Anstatt einer jsp habe ich ein Servlet benutzt. Die Umsetzung sollte Dir aber keine Probleme bereiten.
Sag mal bescheid, ob es funktioniert.

Gruß, Stephan