2012-05-13 31 views
6

我在Jboss AS 7環境中。我的應用程序的/ admIn/*路徑受到需要基於表單的身份驗證的安全約束的保護。安全域是數據庫支持的。JBoss AS 7安全性:如何獲取當前登錄的用戶名?

沒關係,但現在我想在每個頁面的標題中顯示「早上好」。 我正在尋找某種getLoggedUsername()或getPrincipal()函數,但找不到它。

請發佈對官方文檔的參考,如果有的話。 謝謝。

+0

看起來是重複的,只是發現它http://stackoverflow.com/questions/1938517/how-to-get-sessioncontext-in-jboss但我看到任何人發現這個問題都不會發現其他一個人不知道先看JAAS。 –

回答

9

您應該可以使用JAAS。這是JBoss 7應該使用的。

調用委託人將被存儲在SessionContext中,您可以通過告訴JBoss它是一個資源來獲取它。

@Resource 
private SessionContext context; 

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

如果由於某種原因,Injection無法在無狀態bean上工作,那麼可以直接查找EJBContext。

@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); 
     } 
    } 
} 

該片段獲自4 ways to obtain EJBContext

+0

好的。你會在哪裏放這個代碼?有狀態的ejb? –

+0

@FabioB。它不一定是有狀態的。我會用另一種獲得答案的方式更新我的答案。你應該能夠使用無狀態bean的注入,但如果這不起作用,你可以直接查找上下文。 –

相關問題