以编程方式更改JBoss EAP 6.2中的用户角色

时间:2014-06-04 09:23:38

标签: jboss jboss7.x jaas

我们正试图在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缓存了auth类型LOGIN [userName(superuser,)]

正如您所看到的,修改后仍然会获得旧值。 我们正在使用我们自己的类来扩展SimplePrincipal。检查Faces.getRequest()的内容,我们已经看到请求包含JBossGenericPrincipal类型的userPrincipal,在其中,它包含我们的扩展SimplePrincipal。检查它们我们已经看到了:

JBossGenericPrincipal.roles包含超级用户

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

仅仅为了您的信息,我们首先在Wildfly上工作并且它工作得很好,但是我们不得不改为JBoss并发现它无法正常工作。所以我们认为它必须与这个特定的JBoss版本相关。

有人遇到过这个问题吗?知道为什么会失败吗?我想我们需要在某种程度上把正确的角色放在JBossGenericPrincipal.roles中,但是......怎么样?

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

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