【发布时间】: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{
【问题讨论】:
标签: glassfish ejb security-policy