Glassfish/Payara javax.ejb.AccessLocalException: клиент не авторизован для этого вызова в server.log

Я пытался выяснить причину другого исключения для моего динамического веб-приложения здесь - https://github.com/double-whammy/affablebean Я внес небольшое изменение и получил новое исключение — javax.ejb.AccessLocalException: клиент не авторизован для этого вызова

Онлайн-ответ говорит, что я делаю следующее: http://ask.ozar.net/11/javax-accesslocalexception-client-authorized-invocation

Попробуйте удалить сгенерированные файлы политики. Вы сможете найти их в папке C:\glassfish-3\glassfish\domains\domain1\generated\policy. замените свое доменное имя на domain1

Другой говорит больше — http://glassfish.10926.n7.nabble.com/Persisting-Entity-javax-ejb-AccessLocalException-Client-not-authorized-for-this-invocation-td11197.html

вы можете найти файл политики в domains/domainx/generated/policy///{granted.policy,excluded.poliy} положительные гранты находятся в предоставленном.policy, отрицательные гранты находятся в exclude.policy (если есть). (В domaninx x = 1,2,3 и т. д.)

поищите в grant.policy «неквалифицированный грант EJBMethodPermission, с именем = EJbName вашего сессионного компонента; который, я думаю, может быть JpaPersonDao. и со спецификацией метода, которая применяется к методу сохранения.


Я попробовал второй, и я вижу много папок в моей папке Glassfish: C:\glassfish4\glassfish\domains\domain1\generated\policy

C:.
├───AffableBean
│   ├───AffableBean
│   │       granted.policy
│   │
│   └───AffableBean_internal
│           granted.policy
│
├───__admingui
│   └───__admingui
│           excluded.policy
│           granted.policy
│
└───__default-web-module
└───__default-web-module
        granted.policy

Как видите, здесь так много файлов grant.policy. Какой из них я должен исправить? Это тот, который находится в первой папке?


person james    schedule 22.07.2014    source источник


Ответы (6)


Я думаю, что основная проблема связана с кешем сервера Glassfish, потому что вы вносите некоторые изменения в существующий класс EJB.

Чтобы решить эту проблему, вам просто нужно очистить папку/каталог, «созданную» в папке домена, и перезапустить сервер Glassfish для обновления.

person Ilario Junior    schedule 04.11.2015
comment
Это происходит с нами в среде Glassfish. Наше решение состоит в том, чтобы отменить развертывание нашего приложения, выполнить поиск в каталоге Glassfish любого файла/каталога, в котором есть имя нашего приложения, и удалить все эти файлы вручную, перезапустить сервер и повторно развернуть наше приложение. - person John; 29.03.2017

Я решил это, повторно развернув приложение. В NetBeans щелкните проект правой кнопкой мыши и выберите Очистить и построить. Запустите ваше приложение и вуаля!

person Gilbert Lopez    schedule 16.11.2015
comment
иногда помогает перезапуск GlassFish. - person simaremare; 25.11.2018

Я также видел ту же ошибку после:

  1. внесение изменений безопасности в http-listener-2 конфигурации сервера: а именно, отключение старых протоколов TLS и некоторых старых наборов шифров, а затем
  2. перезапускаем стеклянную рыбу.

У меня Пайара 4.1.2.174. Я также нашел способ решить проблему:

  1. остановить сервер
  2. удалите содержимое папки domains/DOMAIN_NAME/generated, затем
  3. запустите сервер снова

Некоторая документация для Glassfish 3.1.2.2 все еще актуальна: согласно Руководство по администрированию высокой доступности Glassfish Server, раздел Синхронизация по умолчанию для файлов и каталогов, папки application и generated подчиняются следующим правилам:

application

По умолчанию только изменение каталога верхнего уровня приложения в каталоге приложения приводит к тому, что DAS синхронизирует каталог этого приложения. Когда DAS повторно синхронизирует каталог приложений, все файлы приложения и все созданное содержимое, связанное с приложением, копируются в экземпляр.

Если файл в подкаталоге верхнего уровня изменяется без изменения файла в подкаталоге верхнего уровня, требуется полная синхронизация. При нормальной работе файлы ниже подкаталогов верхнего уровня этих каталогов не изменяются, и такие файлы не должны изменяться пользователями. Если приложение развернуто и не развернуто, полная синхронизация не требуется для обновления экземпляра с изменением.

generated

Этот каталог содержит сгенерированные файлы для приложений и модулей Java EE, например заглушки EJB, скомпилированные классы JSP и файлы политики безопасности. Не изменяйте содержимое этого каталога.

Этот каталог повторно синхронизируется при повторной синхронизации каталога приложений. Таким образом, повторно синхронизируются только каталоги для приложений, развернутых в экземпляре.

Из чего я понимаю, что каталог generated будет перегенерирован только в том случае, если каталог application создан.

person yesplease    schedule 04.04.2018
comment
Большое спасибо. Сгенерированная папка вызывала много проблем - person Rafael Ruiz Tabares; 07.02.2019

Я встретил ту же проблему. И исправлено удалением папки domains/domainx/generated/policy/{appName}/ и перезапуском.

person Tinily    schedule 19.01.2017

Повторное развертывание приложения или перезапуск сервера/домена работает, но может быть подход парового катка, который вызывает сбой всех развернутых приложений.

Чтобы избежать отключения всего сервера/домена, вы можете просто перезагрузить уязвимое приложение.

Вы можете распознать затронутое приложение по предупреждающему сообщению в server.log, которое показывает конкретный компонент EJB и недоступный метод.

[#|2009-12-18T20:03:38.788+0100|ВНИМАНИЕ|glassfishv3.0|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=25;_ThreadName=http-thread-pool -8080-(2);|Во время вызова метода EJB ExampleEJB произошло системное исключение public void com.example.ExampleEJB.method(java.lang.String) javax.ejb.AccessLocalException: Client not авторизован для этого вызова.

Перезагрузить приложение можно через консоль администратора (по умолчанию доступ через <server-ip>:4848) или через команду asadmin по

asadmin disable <application-name>
asadmin enable <application-name>

Если перезагрузка сама по себе не работает, вам необходимо сначала удалить файл granted.policy уязвимого приложения в разделе <domain-root-dir>/<domain-name>/generated/policy/<application-name>, а затем перезагрузить приложение.

Обратите внимание, что иногда это не ошибка. Если вы настроили защиту EJB и у вашего клиента недостаточно прав, соответствующих недостаточной роли для доступа к методу EJB, это предупреждающее сообщение также может появиться. В этом случае вам необходимо убедиться, что вашему клиенту назначен соответствующий role для выполнения метода.

person Paul Wasilewski    schedule 13.12.2018

Решение llario Junior сработало для меня, но я также удалил все файлы в каталоге приложений Glassfish. Путь: Glassfish\domains{имя домена}\applications

person thomasso    schedule 29.03.2018