Версия: GlassFish сервер 3.1.2.2 (сборка 5)Зачем Glassfish генерировать неполный файл предоставленной.policy?
У меня есть EAR
проект, который содержит WAR
и один EAR
.
В папке META-INF
EAR у меня есть файл sun-application.xml
, который отображает список ролей в группы.
В области по умолчанию для Glassfish
, я настроил пользователей, которые относятся к этим группам.
Я не использую роль по умолчанию для сопоставления, и я не активировал диспетчер безопасности.
Доступ работает отлично. Это также подтверждается удалением дескриптора развертывания, который вызывает исключение авторизации при попытке входа в систему без него.
Однако, пытаясь получить доступ к кажущемуся случайным (но последовательным) отбору моих EJB, я получаю предупреждение от печально известного исключения «javax.ejb.AccessLocalException: Client not authorized for this invocation
» Glassfish.
I 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
отсутствующие в файле granted.policy EJB, несмотря на появление в паре EJBs:
@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{