2012-05-13 4 views
6

Ich bin in einer Jboss AS 7 Umgebung. Der Pfad meiner Anwendung/admin/* ist durch eine Sicherheitsbeschränkung geschützt, die eine formularbasierte Authentifizierung erfordert. Die Sicherheitsdomäne ist datenbankgestützt.JBoss AS 7 Sicherheit: Wie bekomme ich den aktuell geloggten Benutzernamen?

Es ist in Ordnung, aber jetzt möchte ich einen "Guten Morgen" in jeder Kopfzeile anzeigen. Ich suche nach einer Art von getLoggedUsername() oder getPrincipal() -Funktion, aber ich kann es nicht finden.

Bitte geben Sie einen Verweis auf die offizielle Dokumentation, falls vorhanden. Danke.

+0

Sieht aus, um ein Duplikat zu sein, fand es einfach http://StackOverflow.com/Questions/1938517/How-to-Get-SessionContext-in-Jboss, aber ich sehe, dass jemand, der diese Frage findet, nicht die andere gefunden würde einer ohne zu wissen zuerst JAAS zu sehen. –

Antwort

9

Sie sollten JAAS verwenden können. Welches sollte JBoss 7 verwenden?

Der aufrufende Prinzipal wird in einer SessionContext gespeichert, die Sie erhalten können, indem Sie JBoss sagen, dass es eine Ressource ist.

@Resource 
private SessionContext context; 

public void myAwesomeMethod() { 
    String currentUser = context.getCallerPrincipal().getName(); 
} 

Wenn aus irgendeinem Grund die Injektion bei einem zustandslosen Bean nicht funktioniert, können Sie den EJBContext direkt nachschlagen.

@Stateless 
public class HelloBean implements com.foo.ejb.HelloRemote { 
    public void hello() { 
     try { 
      InitialContext ic = new InitialContext(); 
      SessionContext sctxLookup = 
       (SessionContext) ic.lookup("java:comp/EJBContext"); 
      System.out.println("look up EJBContext by standard name: " + sctxLookup); 
     } catch (NamingException ex) { 
      throw new IllegalStateException(ex); 
     } 
    } 
} 

Dieser Ausschnitt wurde von 4 ways to obtain EJBContext erhalten.

+0

Ok. Wo würdest du diesen Code ablegen? Ein Stateful Ejb? –

+0

@FabioB. Es muss nicht Stateful sein. Ich werde meine Antwort mit einer anderen Methode aktualisieren, um sie zu erhalten. Sie sollten Injection mit einem Stateless Bean verwenden können, aber wenn das nicht funktioniert, können Sie den Context direkt nachschlagen. –