2010-12-29 8 views
11

Ich habe eine formularbasierte Anmeldung in meiner JSF 2.0-Anwendung auf dem GlassFish 3-Server mithilfe eines benutzerdefinierten Bereichs konfiguriert. Was ist der einfachste Weg, Informationen über einen angemeldeten Benutzer zu erhalten, d. H. Den Namen des Benutzers.So zeigen Sie den angemeldeten Benutzer an JSF 2.0-Anwendung mit formularbasierter Sicherheit

Ist das möglich? Oder ist die aktuelle Sitzung nur einer Sicherheitsrolle zugeordnet? Wenn ja, gibt es eine Möglichkeit, dies zu ermöglichen, ohne die Anmeldekonfiguration zu ändern?

Einfach gesagt, was ich will, ist eine einfache Nachricht anzuzeigen wie:

Angemeldet als Benutzername

auf meiner Web-Seiten.

Antwort

18

Der einfachste Weg, an dem angemeldeten Benutzer über EL (Expression Language) in JSF 2.0 wäre zu bekommen:

#{request.remoteUser} 

Tobbe Antwort würde gut funktionieren innerhalb einer Backing Bean an den Remote-Benutzer zu erhalten.

11

Die einfache (vielleicht nicht die beste) Antwort war:

FacesContext.getCurrentInstance().getExternalContext().getRemoteUser() 

Ich bin schockiert darüber, wie lange es dauerte, um das herauszufinden.

0

in Ihrer loginmanagedbean Klasse definieren Sie einen currentUSer und in getter dies: Ich habe nicht ein externes Einloggen System und das funktioniert für mich.

public Login getCurrentUser() { 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    ExternalContext externalContext = fc.getExternalContext(); 
    if (externalContext.getUserPrincipal() == null){ 
     logger.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!current principal is null"); 
    } 
    else{ 
     Integer id = Integer.parseInt(externalContext.getUserPrincipal().getName()); 
     logger.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!LOGGED USER "+ id); 
     try { 
      currentUser = getLoginService().getLoginById(id); 
     } 
     catch (Exception ex) { 
     } 
    } 
    return currentUser; 
} 
+0

Was ist diese Zeile? 'Integer id = Integer.parseInt (externalContext.getUserPrincipal(). GetName());' Sie versuchen, name als int zu analysieren? –

0

Innen Facelets können Sie #{request.userPrincipal.name} verwenden.

Verwandte Themen