2013-07-02 2 views
0

Версия: 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{ 

ответ

0

Если кто-то не скажет мне об этом, похоже, причина, по которой у меня возникли проблемы, заключается в том, что вы можете использовать только один <role-name> за <security-role-mapping>.