2013-07-02 46 views
0

版本: GlassFish應用服務器3.1.2.2(建5)爲什麼Glassfish會生成不完整的granted.policy文件?

我有一個EAR項目,該項目包含一個WAR和一個EAR

在EAR的META-INF文件夾中,我有一個sun-application.xml文件,它將選擇的角色映射到組。

Glassfish的默認文件領域,我配置了映射到這些組的用戶。

我沒有使用默認角色映射,我還沒有激活安全管理器。

訪問完美。通過刪除部署描述符進一步證明了這一點,在嘗試登錄時會導致授權異常。

但是,當試圖訪問我的EJB看似隨機(但一致)的選擇時,我非常喜歡臭名昭着的Glassfish「javax.ejb.AccessLocalException: Client not authorized for this invocation」異常。

have tried to delete my generated Policy files and redeploy the server,但這是行不通的。

當我查看我的EJB的策略文件時,馬上注意到受困的EJB授權缺失。

在sun-application.xml文件中定義的每個組似乎會錯過一個或兩個角色。

爲什麼會失敗的Glassfish,從生成完整政策文件(成熟的)工作sun-application.xml@RolesAllowed定義(成熟的)一套?

這裏的部署描述符:

<!DOCTYPE sun-application PUBLIC "-//Sun Microsystems, Inc.//DTD 
GlassFish Application Server 3.0 Java EE Application 6.0//EN" 
"http://www.sun.com/software/appserver/dtds/sun-application_6_0-0.dtd"> 
<sun-application> 



<security-role-mapping> 
    <role-name>ViewAllData</role-name> 
    <role-name>BasicUser</role-name> 
    <group-name>BasicGroup</group-name> 
</security-role-mapping> 

<security-role-mapping> 
    <role-name>DataSupervisor</role-name> 
    <group-name>DatasetSupervisors</group-name> 
</security-role-mapping> 

<security-role-mapping> 
    <role-name>FindData</role-name> 
    <role-name>FindSubData</role-name> 
    <group-name>DatasetUsers</group-name> 
</security-role-mapping> 

<security-role-mapping> 
    <role-name>ManageData</role-name> 
    <role-name>ManageSubData</role-name> 
    <role-name>InvokeDataload</role-name> 
    <group-name>DatasetManagers</group-name> 
</security-role-mapping> 


<security-role-mapping> 
    <role-name>ResolveGroup1</role-name> 
    <role-name>ResolveGroup2</role-name> 
    <role-name>ResolveGroup3</role-name> 
    <group-name>Decoders</group-name> 
</security-role-mapping> 
</sun-application> 

出於某種原因,該角色ResolveGroup1ViewAllData從EJB granted.policy文件丟失,儘管出現在一對夫婦的EJB:

@RolesAllowed({"ResolveGroup1"}) 
@Stateless(mappedName = "ejb/FindGroupOneController") 
@Local(FindRegistrationFragmentController.class) 
@Interceptors(SpringBeanAutowiringInterceptor.class) 
public class FindGroupOneControllerImpl implements FindGroupOneController{ 


@RolesAllowed({"ViewAllData"}) 
@Stateless(mappedName = "ejb/ViewDataController") 
@Local(FindRegistrationFragmentController.class) 
@Interceptors(SpringBeanAutowiringInterceptor.class) 
public class ViewDataControllerImpl implements ViewDataController{ 

回答

0

除非有人可以告訴我,否則,看起來像我遇到問題的原因是因爲您可以使用每<security-role-mapping>只有一個<role-name>

相關問題