版本: 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>
出于某种原因,该角色ResolveGroup1
和ViewAllData
从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{