2014-01-08 81 views
0

我有一個CDI - > EJB應用程序。 我使用JBoss j_security來完成過去的安全性。 我與Shiro的安全工作。Jboss EJB和Shiro

但我唯一的問題是如何在我的EJB中獲得SessionContext? 隨着Jboss安全我得到了用戶名,誰登錄的位置:

SessionContext sessionContext; String email = sessionContext.getCallerPrincipal()。getName();

現在我想在我的EJB中獲得用戶名。 如何使用SessionContext設置用戶名?

謝謝大家幫忙

回答

0

這是一個有點棘手,而且還取決於在JBoss的版本,您正在使用。在AS 7.x和EAP 6.x範圍內,由於存在多個錯誤,因此不能通過使用公共API來完成。

爲了使sessionContext知道用戶名和角色就像我以前在這裏你可以使用JBoss特定代碼:https://github.com/javaeekickoff/jboss-as-jaspic-patch/commit/d691fd4532d9aeae6136e3adc2537ff81c525673

它應該是這樣的;

SecurityContext context = SecurityActions.getSecurityContext(); 
context.getUtil().createSubjectInfo(new SimplePrincipal(userName), 
    null, 
    someSubject 
); 

看看該文件的其餘部分,看看someSubject應該如何創建和填充。

不幸的是,提到的JBoss版本@RolesAllowed將永遠不會工作,因爲JBoss並沒有接​​管來自本地調用者的已經過身份驗證的身份,而是在調用實際的bean之前總是諮詢JBoss特定的「安全域」。當然,它對四郎一無所知。