我正在使用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
库。
答案 0 :(得分:0)
Apache Shiro是一个应用层安全解决方案。据我所知,它没有以任何方式与您的应用程序服务器集成。
Java EE服务器通常希望负责身份验证,授权等。因此,它可以在进行本地和远程EJB调用时正确传播凭据。这就是javax.annotation.security.RolesAllowed等功能的实现方式。