2012-12-20 51 views
1

我在ejb-jar.xml中有以下配置;RMI調用受保護的EJB3方法失敗

<assembly-descriptor> 
    <security-role> 
     <role-name>userRole</role-name> 
    </security-role> 

    <method-permission> 
     <role-name>userRole</role-name> 
     <method> 
      <ejb-name>MyBean</ejb-name> 
      <method-name>*</method-name> 
     </method> 
    </method-permission> 
</assembly-descriptor> 

而且我已經配置在我的jboss.xml以下爲安全域(含我已經添加如下額外的用戶默認域;

.... 
<security-domain>java:/jaas/JBossWS</security-domain> 
... 

User Properties Files Have Following; 
SSOUSER=123456 

User Roles Files have Following; 
SSOUSER=userRole 

我已經寫folliwing代碼在我的客戶端連接到JNP;

Hashtable environment = new Hashtable(); 
    environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
    environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
    environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); // remote machine IP 
    environment.put(Context.SECURITY_PRINCIPAL, "SSOUSER"); // User Context 
    environment.put(Context.SECURITY_CREDENTIALS, "123456"); 

和JBoss控制檯上收到以下錯誤,而試圖訪問bean的方法(查找工程確定,當我嘗試調用方法,我獲得以下);

16:43:42,987 ERROR [RoleBasedAuthorizationInterceptor] Insufficient permissions, principal=null, requiredRoles=[userRole], principalRoles=[] 

我的配置中是否有缺失的東西?

感謝

-

Sjunejo

回答

1

尋找相當長後,我發現下面這幫助;

我已

https://community.jboss.org/message/251308

的Th變化如下;

Hashtable environment = new Hashtable(); 
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory"); 
environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); // remote machine IP 
environment.put(Context.SECURITY_PRINCIPAL, "SSOUSER"); // User Context 
environment.put(Context.SECURITY_CREDENTIALS, "123456"); 

一切都不變,我用的是不正確INTIAL_CONTEXT_FACTORY即「org.jnp.interfaces.NamingContextFactory」,當我切換到「org.jboss.security.jndi.JndiLoginInitialContextFactory」,我得到了校長在來自SessionContext的EJB中