为什么Glassfish会生成一个不完整的granted.policy文件?

时间:2013-07-02 10:54:44

标签: glassfish ejb security-policy

版本: GlassFish Server 3.1.2.2(版本5)

我有一个EAR项目,其中包含WAR和一个EAR

在EAR的META-INF文件夹中,我有一个sun-application.xml文件,可以将一组角色映射到组。

Glassfish的默认文件域中,我已配置映射到这些组的用户。

我没有使用默认角色映射,我还没有激活安全管理器。

Access完美无缺。通过删除部署描述符进一步证明了这一点,当尝试在没有它的情况下登录时会导致授权异常。

然而,当我试图访问看似随机(但一致)的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>

由于某种原因,EJB granted.policy文件中缺少角色ResolveGroup1ViewAllData,尽管出现在几个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{

1 个答案:

答案 0 :(得分:0)

除非有人能告诉我,否则看起来我遇到问题的原因是因为每<role-name>只能使用一个<security-role-mapping>