2017-12-22 9 views
0

So habe ich dieses JSF-Projekt, das formularbasierte Authentifizierung verwendet. Beim ersten Versuch, meine JSF-Seite zu öffnen, werde ich zu meinem Login-Server weitergeleitet. Dort findet die Authentifizierung statt und bei Erfolg werde ich zu meiner Anwendung weitergeleitet. Leider weiß ich nicht, wie man die Informationen erhält, die der Authentifizierungsserver bereitstellt, wie den Benutzernamen.Wie Benutzerprinzipal von Liberty FORM-basierte Authentifizierung in JSF-Seite erhalten?

Ich habe eine Seite, wo ein Text sagt "Signed in as". sollte von einem ManagedBean mit der Methode getCurrentUserPrincipal() gesetzt werden.

<h:outputText value="#{myBean.getCurrentUserPrincipal()}"/> 

Die Methode ist derzeit leer. Ich versuchte es mit WSSubject.getCallerPrincipal() und FacesContext.getCurrentInstance(). GetExternalContext(). GetUserPrincipal() aber das gab null zurück. Wie bekomme ich die Informationen, die ich mit dieser Methode benötige? Ist es überhaupt möglich? Ich bin mir nicht sicher, welche Informationen Sie benötigen, also wenn etwas fehlt, werde ich zur Verfügung stellen, wenn ich kann.

+0

Wie können wir wissen, wo ** Ihr ** Authentifizierungsserver die Informationen ablegt? Diese Frage ist in keiner Weise Java, JSF, Servlets oder Java-Ee verwandt. – Kukeltje

+0

Ok, wo könnte die Information gespeichert werden, wenn ich eine formularbasierte Authentifizierung (in web.xml) mache. Ich werde zum Login und zum Erfolg zurück zu meiner Anwendung weitergeleitet. Wie ist das nicht mindestens j2ee oder Servlet verwandt? Nehmen wir an, es ist in einem Cookie gespeichert: Wie bekomme ich die Informationen von dort? Oder LTPA-Token (wie Cookie?)? Was dann? BTW. Ich benutze Liberty. Benötige ich eventuell eine Konfiguration in der server.xml? – kinglite

Antwort

0

Nach einigen Ausgrabungen fand ich heraus, dass unser Authentifizierungsserver ein Siteminder-Dienst war und die Informationen in einem Cookie (SMSESSION) und Kopfzeileninformationen der Antwort zurückkamen. So würde es ausreichen, die Header-Informationen zu lesen, um den Benutzernamen zu erhalten.

Aber die Haupt oder Thema zurückkehren würde noch null. Um dies zu erreichen und auch die Sicherheit zu verbessern, habe ich Liberty ein TAI hinzugefügt. Wie das gemacht wird, können Sie here und here lesen. Mein myTAI.jar ist wirklich einfach. Da ich eine ldap-Registrierung konfiguriert habe, brauche ich den Benutzernamen Sicherheitsname (z. B. uid = .., ou = .., ou = ..) des angegebenen Benutzernamens (Header) für die weitere Authentifizierung und geben Sie Folgendes zurück:

return TAIResult.create(HttpServletResponse.SC_OK, userSecName);

Im Hintergrund wird Liberty dann eine weitere Authentifizierung durchführen und das Prinzip und Subjekt erstellen. Wenn alles korrekt konfiguriert ist und der Benutzer berechtigt ist, die Anwendung einzugeben, wird und wird er Prinzip- und Fachobjekte zur Verfügung haben.

+0

Wie Sie am Ende sehen können, ist es alles nicht jsf, nicht java-ee (j2ee ist die alte Abkürzung) und nicht in Verbindung mit Servlet in dem Sinne, dass sie keine aktive Rolle spielen in all dem nicht funktioniert vorher ... Aber großartig, du hast es gelöst. – Kukeltje

0

Injizieren Sie die wichtigsten in Ihrer verwalteten Bohne wie:

@Inject 
private Principal principal; 

dann, basierend auf Ihrer html oben für output Feld, wie ein Getter in Ihrem Managed Bean etwas bieten:

public String getCurrentUserPrincipal() { 
    return principal.getName(); 
} 
Verwandte Themen