为啥 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>
由于某些原因,角色 ResolveGroup1
和 ViewAllData
在 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】:除非有人可以告诉我,否则我遇到问题的原因似乎是因为每个 <security-role-mapping>
只能使用一个 <role-name>
。
【讨论】:
以上是关于为啥 Glassfish 会生成一个不完整的 grant.policy 文件?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 Glassfish 而不是 Apache?它的优点和缺点是啥?
为啥在 Glassfish 或 Tomcat 前使用 Apache Web Server?
将 Glassfish 与 IIOP 结合使用时的完整协议层次结构是啥