2013-07-02 47 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>

相关问题