Jboss EJB和Shiro
问题描述:
我有一个CDI - > EJB应用程序。 我使用JBoss j_security来完成过去的安全性。 我与Shiro的安全工作。Jboss EJB和Shiro
但我唯一的问题是如何在我的EJB中获得SessionContext? 随着Jboss安全我得到了用户名,谁登录的位置:
SessionContext sessionContext; String email = sessionContext.getCallerPrincipal()。getName();
现在我想在我的EJB中获得用户名。 如何使用SessionContext设置用户名?
谢谢大家帮忙
答
这是一个有点棘手,而且还取决于在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特定的“安全域”。当然,它对四郎一无所知。