Проблемы авторизации с пакетным приложением OSGi в Glassfish — текущий пользователь не авторизован для выполнения этой операции

Я уже развернул приложение OSGi maven со многими пакетами OSGi под Glassfish 4.1.2. Эти пакеты активируются с помощью веб-приложения, которое выполняет некоторые вызовы с определенными в нем заданиями. Все это на самом деле работает ожидаемым образом.

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

Цель состоит в том, чтобы развернуть другое веб-приложение с помощью веб-сервисов REST, поэтому я могу запросить статус пакета по запросу. Когда я бегу:

private JobExecution getJob(int id) {

   JobOperator jobOperator = BatchRuntime.getJobOperator();
   JobExecution job = null;

   try {

           job = jobOperator.getJobExecution(id);

           System.out.println("job: " + job);
           System.out.println("name: " + job.getJobName());
           System.out.println("batchStatus: " + job.getBatchStatus());

   } catch (Exception e) {

           e.printStackTrace();

   }

   return job;

}

Я получаю это исключение:

javax.batch.operations.JobSecurityException: Текущий пользователь не авторизован для выполнения этой операции.

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

Странно то, что когда я запускаю пакет из контроллера веб-приложения, он запускается, и я могу получить статус пакета, как шарм:

@ViewScoped
@ManagedBean(name = "controller")
public class Controller implements Serializable {


   public void executeJobController() {

       JobOperator jobOperator = BatchRuntime.getJobOperator();
       Long executionIdDummy = jobOperator.start("DummyJob", new Properties());
       JobExecution jobExecutionDummy = jobOperator.getJobExecution(executionIdDummy);
       System.out.println("BatchDummyStatus : " + jobExecutionDummy.getBatchStatus());

   }
}

В учебнике JSR352 Spec, Javadoc или Java EE я ничего не могу найти о безопасности в пакетном режиме.

Возможно ли это сделать? Речь идет о Glassfish JSR352? Как я могу этого добиться?

Спасибо за ваше время.

ИЗМЕНИТЬ

После настройки большинства журналов на FINE, как было предложено @Scott Kurz, я вижу эти новые строки:

[2017-12-05T13:10:45.100-0500] [glassfish 4.1] [FINE] [] [javax.enterprise.web.core] [tid: _ThreadID=64 _ThreadName=http-listener-1(4)] [timeMillis : 1512497445100] [levelValue: 500] [ИМЯ КЛАССА: org.apache.catalina.authenticator.AuthenticatorBase] [ИМЯ МЕТОДА: invoke] [[ Запрос на проверку безопасности GET /ws/webresources/facturacion/getJobs]] [ 2017-12-05T13:10:45.101-0500] [glassfish 4.1] [FINE] [] [javax.enterprise.web.core] [tid: _ThreadID=64 _ThreadName=http-listener-1(4)] [timeMillis: 1512497445101] [levelValue: 500] [ИМЯ КЛАССА: org.apache.catalina.authenticator.AuthenticatorBase] [ИМЯ МЕТОДА: invoke] [[ Не подлежит никакому ограничению]]

И это означает что-то странное:

[2017-12-05T13:10:45.104-0500] [glassfish 4.1] [FINE] [AS-WEB-NAMING-00005] [javax.enterprise.web.naming] [tid: _ThreadID=64 _ThreadName=http-listener- 1(4)] [timeMillis: 1512497445104] [levelValue: 500] [ИМЯ КЛАССА: org.apache.naming.resources.FileDirContext] [ИМЯ МЕТОДА: файл] [[ Файл не может быть прочитан /home/felipe /Documents/Programas/glassfish4/glassfish/domains/domain1/applications/ws/WEB-INF/classes/META-INF/services/javax.batch.operations.JobOperator]]

Я пробовал запускать стеклянную рыбу как sudo на локальном хосте, но получаю то же поведение и точно такую ​​же ошибку.


person ChoCho    schedule 05.12.2017    source источник
comment
В Glassfish модель безопасности основана на приложениях, а не на пользователях. Таким образом, такие приложения, как консоль администратора, могут просматривать все задания, в то время как код, выполняемый в компонентах приложения в других приложениях, обычно может просматривать только задания, связанные с этим приложением (отправленные/запущенные из этого приложения). Если вы включите самое точное ведение журнала для com.ibm.jbatch.*, вы можете получить немного больше информации о том, что происходит (например, возможно, по какой-то причине Glassfish не связывает ваш веб-сервис с приложением, в котором по какой-то причине выполнялись пакетные задания, хотя вы считаете, что так и должно быть).   -  person Scott Kurz    schedule 05.12.2017
comment
Это проблема авторизации, связанная с пакетом, с которой вы столкнулись. Запуск от имени суперпользователя не имеет значения. Не уверен, что какие-либо записи журнала, которые вы вставили, имеют значение. Посмотрите здесь и здесь.   -  person Scott Kurz    schedule 05.12.2017
comment
Надеюсь, это даст вам возможность использовать для отладки проблемы. Здесь текущий тег является чем-то вроде обобщения/абстракции того, что в Glassfish является текущим приложением. Поэтому, если то, что этот помощник показывает как текущий тег/приложение, не соответствует вашим ожиданиям, то это ваша проблема.   -  person Scott Kurz    schedule 05.12.2017
comment
Единственный способ заставить его работать — это создавать веб-сервисы внутри того же веб-приложения, где находится исполнитель задания. Только таким образом я могу запросить статус выполнения задания. На самом деле, я изучаю, есть ли способ запросить внутреннюю базу данных Glassfish. Я не знаю, почему в первом тесте запрос статуса пакета из того же веб-приложения не работал, возможно, он не был полностью перераспределен.   -  person ChoCho    schedule 05.02.2018
comment
Было бы интересно услышать, что вы найдете. Если это легко сделать по умолчанию, это сведет на нет большую часть целей проверок авторизации. С другой стороны, если есть способ, которым администратор может разрешить это, если это то, чего они действительно хотят, то, я думаю, это может сработать.   -  person Scott Kurz    schedule 05.02.2018
comment
@ Скотт Курц, наконец, нашел способ заставить его работать, насколько я вижу, когда вы развертываете приложение в Glassfish, в этот момент сервер приложений назначает идентификатор приложения. Поскольку моя среда основана на OSGi, я снова развернул все пакеты OSGi и, наконец, повторно развернул веб-приложение, и вуаля! Я могу получить статус заданий из веб-приложения.   -  person ChoCho    schedule 01.03.2018


Ответы (1)


Поскольку я работаю над средой OSGi, сначала повторно развернул (отменил развертывание вручную и развернул один за другим) все пакеты OSGi снова и, наконец, повторно развернул (неразвернул и развернул) веб-приложение, в котором находится веб-сервис, а затем он начал работать.

Похоже, что зависимости OSGi каким-то образом не были распознаны после некоторых переделок, что вызвало проблему безопасности.

person ChoCho    schedule 01.03.2018
comment
Рад слышать. Я отредактировал вопрос, перефразировав его, чтобы он был более полезным. - person Scott Kurz; 01.03.2018
comment
Спасибо @ScottKurz, если кому-то интересно, у Glassfish есть собственный REST API для запроса статуса пакетного выполнения, просто доступ к dummyip:4848/management/domain/list-batch-jobs.json - person ChoCho; 05.03.2018