2014-01-08 43 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特定的“安全域”。当然,它对四郎一无所知。