【问题标题】:How to set the principal of a MessageDriven bean using annotations?如何使用注释设置 MessageDriven bean 的主体?
【发布时间】:2014-12-13 02:10:10
【问题描述】:

我在 glassfish v4 上运行,我使用消息驱动 bean。目前我正在定义 bean 在 glassfish-ejb-jar.xml 中运行的主体,例如:

<enterprise-beans>
  <ejb>
    <ejb-name>MessageConsumerBean</ejb-name>
    <principal>
      <name>MDBPrincipal</name>
    </principal>

是否可以仅使用注释来做同样的事情,例如@MessageDriven?

【问题讨论】:

  • 你试过@RunAs注解吗?它不会设置调用者主体,但允许您运行受保护的方法。
  • @nomoa 是的。但正如你所说,它不会设置校长。
  • 好吧,除了深入研究 GF 源代码以获取一个不起眼的 @ActivationConfigProperty 之外,我没有其他线索。这是 MDB 的一个已知限制(请参阅应用到 MDB 的编程限制underpop.online.fr/j/java/…
  • @nomoa 那么,MDB 是否没有设计为 Principal?如果是这样,那将是一个答案。
  • Principal 不会按照设计从客户端(消息发送者)传播到 MDB。这就是 MDB 中没有 Principal 的原因。如果需要为 MDB 授予特定角色,那么 RunAs 就可以了。但是,如果您需要 Principal 来处理某些应用程序逻辑,恐怕只有平台相关的解决方案,例如 RunAsPrincipal (JBoss) 或 glassfish-ejb-jar.xml 在您的情况下(找不到任何 glassfish 自定义注释)。

标签: java glassfish jms glassfish-4 message-driven-bean


【解决方案1】:

根据https://java.net/downloads/ejb-spec/mdb.no-method.interface.pdf 第 133 页第 5.4.14 节,主体可能在安全上下文中传播,但细节不受 EJB 规范的约束。换句话说,它是一个依赖于平台的功能。

如果需要授予 MDB 特定角色以运行某些受保护的 @RolesAllowed 方法,可以使用 @RunAs。

如果您需要 Principal 来处理某些应用程序逻辑,恐怕只有平台相关的解决方案,例如 RunAsPrincipal (JBoss) 或 glassfish-ejb-jar.xml。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 2015-09-26
    • 2011-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多