【问题标题】:IIOP1002: Principal propagation: Cannot find principal information in subject - Apache Shiro + EJBIIOP1002:主体传播:在主题中找不到主体信息 - Apache Shiro + EJB
【发布时间】:2018-09-14 08:27:14
【问题描述】:

我正在使用 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 库。

【问题讨论】:

  • 我猜这是 Glassfish 配置问题。您的实例是如何配置的?
  • 我不知道这是否是 Glassfish 配置问题,因为所有实例都具有相同的配置。当我尝试从另一个 glassfish 实例访问 EJB 时会发生这种情况。例如:我正在使用 Shiro Security 运行本地应用程序,然后尝试访问远程 EJB(在另一个 glassfish 实例中),它给了我错误。但是,如果我在同一个实例中运行,我不会收到错误/警告。

标签: java jsf glassfish ejb shiro


【解决方案1】:

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

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

【讨论】:

  • 但是为什么当我不使用 Shiro 时我没有收到这个警告?在实现 Shiro 之前,我使用这个应用程序没有问题(但它根本没有安全性)。
  • 也许 Shiro 已经在其自己的 java.security.Principal 版本中进行了黑客攻击*,这随后让 GlassFish 感到惊讶? *我的意思很好!
  • 也许......但我不知道如何检查这个。我正在阅读文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
  • 2012-07-19
  • 2015-10-20
  • 2018-02-12
  • 2015-07-14
  • 2014-10-28
  • 2016-08-02
相关资源
最近更新 更多