2013-08-19 37 views
0

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

我用一個片段 - 發現here - 執行登錄:

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

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

+0

你的應用程序是什麼類型的(命令行應用程序)?它對JBoss(EJB)有什麼要求? – Beryllium

+0

我編輯了我的問題,使其更加清晰。所以,是的,目前它只是一個命令行應用程序。首先,我們不需要會話處理 - 只需授予用戶訪問權限即可。因此,不需要調用EJB並使用用戶的登錄會話 - 如果您的意思是「對JBOSS(EJB)有什麼要求?」 – MedMike

+0

如果你不是在調用EJB,你還會使用JBoss做什麼(登錄後)?您使用哪個JBoss登錄模塊? – Beryllium

回答

2
  • 如果(自定義)登錄模塊檢查它,您可以防止基於(不存在)角色的身份驗證。
  • 但通常情況下,如果有一個用戶具有匹配的密碼,則用戶將被認證(可能根本沒有任何角色)。所以通常身份驗證(用戶/密碼)未與授權(角色)鏈接。

  • 在EJB時,您可以使用基於角色的聲明性授權(見@RolesAllowed
  • 至於EJB的:你可以在EJB
  • 作爲一個servlet/JSP調用EJBContext.getCallerPrincipal()EJBContext.isUserInRole() :你可以撥打HttpServletRequest.getRemoteUser()HttpServletRequest.isUserInRole()
  • 至於獨立應用程序,我不知道一個API。
  • 所以標準的API只允許檢查一個角色。如果你想獲得角色列表,那麼沒有官方的API。

無論如何,尋找到一個登錄模塊(例如:DatabaseServerLoginModule)的源極。然後編寫一個相同的EJB(關於角色查找),並將角色列表返回給您的獨立應用程序。

0

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

  1. 在web中添加安全約束。XML

    網絡資源 /* ROLE_ADDUPDATE ROLE_SEARCH ROLE_ADMIN ROLE_ADMIN ROLE_ADDUPDATE ROLE_SEARCH

  2. 添加的Jboss西沽RITY域名的jboss-web.xml中

    的java:/ JAAS /其他 真正

    • 添加用戶和角色在application-users.properties和applications-roles.properties(見documentatin的的JBoss命令行界面)
    • 您可以在粒度級別像EJB方法級別使用@RolesAllowed,@PermitAll,@DenyAll等甚至授權,如果您正在使用EJB
相關問題