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