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

问题描述 投票:0回答:2

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

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

IIOP1002: Principal propagation: Cannot find principal information in subject

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

编辑:

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

编辑2:

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

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

还是没有运气。

SecurityUtils 来自

org.apache.shiro.SecurityUtils
库。

java jsf glassfish ejb shiro
2个回答
0
投票

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

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


0
投票

Shiro 将其委托人传播到 javax.security.Principal,这是远程 EJB 无法理解的。必须取消 Java 主体。 这是在 Shiro EE 集成模块 中完成的,它将集成到 Shiro 2.0+ 版本中

© www.soinside.com 2019 - 2024. All rights reserved.