【问题标题】:WebLogic: can't get roles for user in EJB3WebLogic:无法在 EJB3 中为用户获取角色
【发布时间】:2011-03-11 15:16:26
【问题描述】:

在我的 EJB 3 中,我尝试测试主体的角色,但它总是返回 false

在我的 WebLogic 11g 控制台中,我在“MyDomain”->“Security Realms”->“myrealm”->“Users and Groups”下定义了 3 个用户(user1、user2 和 user3)和 2 个组(role1 和 role2);角色 1 有用户 1 和用户 3,角色 2 有用户 2 和用户 3。
我的 EJB 没有进一步定义安全性(没有 @RolesAllowed 等或 DD 中的条目)。

当我在我的 EJB 中测试是否存在具有 sessionContext.isCallerInRole(role); 的角色时,它总是返回 false。如果我打电话给sessionContext.getCallerPrincipal().getName();,我会得到正确的用户 ID。

我做错了什么?

【问题讨论】:

  • 了解您拥有的 Weblogic 11g 的确切版本可能会有所帮助。我最近有一个尖锐和不愉快的经历,即 EJB 和 Jax-Ws 的行为和错误在标记为 10.3.0、10.3.1、10.3.3 和 10.3.4 的 Weblogic 的各个版本之间存在巨大差异,除了第一个标记为 11g 之外的所有版本.
  • 我是WebLogic Server Version: 10.3.4.0

标签: java security ejb-3.0 weblogic weblogic11g


【解决方案1】:

您是否使用 @DeclareRoles 或 声明了您的角色?如果我正确阅读了规范,第 17.2.5.3 节似乎要求您必须声明您在通过一种或另一种机制调用 isCallerInRole() 时使用的任何角色名称。

【讨论】:

  • 你似乎是对的。文档都告诉添加@DeclareRoles() 或在描述符中指定它们。但即使我添加@DeclareRoles({ "role1", " role2" }) 也不起作用。
  • 此外,为了完成这项工作,我必须将 EAR 的安全模型更改为“CustomRoles”。我通过更改安全领域默认设置来做到这一点,但您也可以在部署程序中执行此操作。此外,显然我在管理控制台中创建了一个全局角色,该角色与 EJB 中引用的角色名称相同,并且具有映射到用户必须属于的组才能拥有该角色的角色条件。跨度>
【解决方案2】:

如果您的sessionContext 被注入,则在@Resource 注释中将身份验证类型指定为容器对我有用。 例如:

@Resource(authenticationType=AuthenticationType.CONTAINER)
private SessionContext sessionCtx;

【讨论】:

    猜你喜欢
    • 2015-07-17
    • 2021-03-30
    • 2020-07-12
    • 2016-04-30
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 2016-03-09
    • 2014-05-02
    相关资源
    最近更新 更多