【问题标题】:Programmatically change user role in JBoss EAP 6.2在 JBoss EAP 6.2 中以编程方式更改用户角色
【发布时间】:2014-07-24 21:07:13
【问题描述】:

我们正试图在 JBoss EAP 6.2 中实现这一点,但目前我们无法找到它失败的原因。

在我们的应用程序中,超级用户可以在登录应用程序后决定他们想要使用的角色。因此,首先用户将拥有一个角色,然后我们要更改它。为此,我们正在执行以下操作:

Subject sub = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
for (Principal p : sub.getPrincipals()) {
            if ("Roles".equals(p.getName())) {

                SimpleGroup group = (SimpleGroup) p;
                group.removeMember(new SimplePrincipal(CONSTANT_SUPER_USER));
                group.addMember(new SimplePrincipal(authorizationRole));

            }
}

这实际上是在更改主题中的角色。但是之后在检查授权时,我们会在服务器的日志中得到以下信息:

[org.apache.catalina.authenticator] (http-/0.0.0.0:8080-11) 我们已经缓存了主体 GenericPrincipal[userName(superuser,)] 的身份验证类型 LOGIN

如您所见,修改后仍然是旧值。 我们正在使用我们自己的扩展 SimplePrincipal 的类。检查 Faces.getRequest() 的内容,我们看到请求包含 JBossGenericPrincipal 类型的 userPrincipal,并且在其中包含我们扩展的 SimplePrincipal。检查他们两个我们发现:

JBossGenericPrincipal.roles 包含超级用户

JBossGenericPrincipal.subject.principals 包含修改后的具有新授权角色的 SimpleGroup

仅供参考,我们首先在 Wildfly 上运行它并且运行良好,但我们不得不更改为 JBoss 并发现它无法正常运行。所以我们认为它必须与这个特定的 JBoss 版本相关。

有人遇到过这个问题吗?知道为什么这可能会失败吗?我想我们需要以某种方式在 JBossGenericPrincipal.roles 中放置正确的角色,但是......如何?

感谢任何帮助。谢谢!

【问题讨论】:

    标签: jboss jboss7.x jaas


    【解决方案1】:

    似乎 Red Hat 不建议在身份验证完成后更改角色。因此,唯一的解决方案是注销并使用新角色重新登录用户。

    【讨论】:

      猜你喜欢
      • 2014-10-07
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      相关资源
      最近更新 更多