为啥 Glassfish 会生成一个不完整的 grant.policy 文件?

Posted

技术标签:

【中文标题】为啥 Glassfish 会生成一个不完整的 grant.policy 文件?【英文标题】:Why would Glassfish generate an incomplete granted.policy file?为什么 Glassfish 会生成一个不完整的 grant.policy 文件? 【发布时间】:2013-07-02 10:54:44 【问题描述】:

版本: 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>

由于某些原因,角色 ResolveGroup1ViewAllData 在 EJB grant.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

【问题讨论】:

【参考方案1】:

除非有人可以告诉我,否则我遇到问题的原因似乎是因为每个 &lt;security-role-mapping&gt; 只能使用一个 &lt;role-name&gt;

【讨论】:

以上是关于为啥 Glassfish 会生成一个不完整的 grant.policy 文件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 Glassfish 而不是 Apache?它的优点和缺点是啥?

为啥在 Glassfish 或 Tomcat 前使用 Apache Web Server?

将 Glassfish 与 IIOP 结合使用时的完整协议层次结构是啥

为啥opencv会找到轮廓的边界点,无序且不完整?

为啥将 lambda 传递给受约束的类型模板参数会导致“不完整类型”编译器错误?

为啥我的龙分形不完整[关闭]