簡體   English   中英

客戶端應用程序以獲取登錄用戶(JAAS)的角色

[英]Client application to get the roles of a logged in user (JAAS)

我有以下代碼用於運行Java(SE)應用程序(不在服務器上),其中登錄應使用運行JAAS身份驗證的現有JBoss服務器(我綁定到4.2.3)完成。 我從一個簡單的控制台應用程序開始執行登錄,然后將此功能集成到應用程序中。

我使用一個片段 - 在這里找到 - 來執行登錄:

JaasJbossConfiguration.activateConfiguration();
UsernamePasswordHandler handler =
  new UsernamePasswordHandler("userName", "passWord");
LoginContext lc = new LoginContext("myrealm", handler);
try {
     lc.login();
} catch (LoginException e) {
 // Authentication failed.
}

這就像一個魅力。 現在我想擴展我的應用程序並僅允許特殊角色的用戶訪問。 有沒有辦法從Java應用程序端獲取用戶角色或僅允許那些用戶進行身份驗證?

  • 如果(自定義)登錄模塊檢查它,則可以阻止基於(不存在的)角色的身份驗證。
  • 但通常情況下,如果用戶具有匹配的密碼,則會對用戶進行身份驗證(可能根本沒有任何角色)。 因此,通常身份驗證 (用戶/密碼)不與授權 (角色)鏈接。

  • 在EJB中,您可以使用基於角色的聲明性授權(請參閱@RolesAllowed
  • 至於EJB:您可以在EJB中調用EJBContext.getCallerPrincipal()EJBContext.isUserInRole()
  • 至於servlet / JSP:你可以調用HttpServletRequest.getRemoteUser()HttpServletRequest.isUserInRole()
  • 至於獨立應用程序,我不知道API。
  • 因此,標准API僅允許檢查角色。 如果要獲取角色列表,則沒有官方API。

無論如何,請查看登錄模塊的源代碼(例如: DatabaseServerLoginModule )。 然后編寫一個執行相同操作的EJB(關於角色查找),並將角色列表返回給獨立應用程序。

按照以下步驟使用容器(主要是JAAS)提供的JEE安全性。 優點是,您可以通過配置將身份驗證和授權更改為任何新技術,而不會影響應用程序的其他部分。 我舉一個使用JBoss AS的例子

  1. 在web.xml中添加安全性約束

    Web資源/ * ROLE_ADDUPDATE ROLE_SEARCH ROLE_ADMIN ROLE_ADMIN ROLE_ADDUPDATE ROLE_SEARCH

  2. 在jboss-web.xml中添加Jboss安全域名

    java:/ jaas / other true

    • 在application-users.properties和applications-roles.properties中添加用戶和角色(請參閱Jboss for Document Line Interface的documentatin)
    • 如果使用EJB,您甚至可以使用@RolesAllowed,@ PermitAll,@ DenyAll等在EJB方法級別等粒度級別進行授權

暫無
暫無

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

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