簡體   English   中英

以編程方式更改JBoss EAP 6.2中的用戶角色

[英]Programmatically change user role in JBoss EAP 6.2

我們正在嘗試使它在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中放置正確的角色,但是...如何?

任何幫助表示贊賞。 謝謝!

似乎Red Hat不建議在身份驗證完成后更改角色。 因此,唯一的解決方案是使用新角色注銷並重新登錄用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM