IIOP1002:主要传播:无法在主题中找到主要信息--Apache Shiro + EJB

时间:2018-04-04 17:10:03

标签: java jsf glassfish ejb shiro

我正在使用Shiro Security来保护JSF项目。

它按预期工作,包括调用远程EJB(不安全)。但是,当调用不安全的EJB时,我有以下警告,但该方法执行没有问题:

IIOP1002: Principal propagation: Cannot find principal information in subject

这到底是什么意思?我该怎么做才能解决这个问题?我需要从安全的应用程序在远程EJB中执行该方法,并且每次调用EJB时​​都会将此警告转储到日志中(这会多次发生)。

修改

当我在与EJB相同的Glassfish服务器中部署项目时,警告不会发生。

编辑2:

我考虑过在调用EJB之前在PrincipContext中插入主要信息,如下所示:

Hashtable env = new Hashtable();
env.put(Context.SECURITY_PRINCIPAL, SecurityUtils.getSubject().getPrincipal());
ctx = new InitialContext(env);

仍然没有运气。

SecurityUtils来自org.apache.shiro.SecurityUtils库。

1 个答案:

答案 0 :(得分:0)

Apache Shiro是一个应用层安全解决方案。据我所知,它没有以任何方式与您的应用程序服务器集成。

Java EE服务器通常希望负责身份验证,授权等。因此,它可以在进行本地和远程EJB调用时正确传播凭据。这就是javax.annotation.security.RolesAllowed等功能的实现方式。