Использование @RunAs в планировщиках EJB

У меня много EJB с моими бизнес-методами. Эти методы используют аннотацию @RolesAllowed, чтобы проверить, может ли пользователь выполнить этот метод.

Итак, у меня есть планировщик EJB, который вызывает эти методы EJB. Планировщики EJB работают с анонимным пользователем, поэтому авторизация не выполняется.

Как я могу запускать свои планировщики с другой ролью? Для тестирования предложений я использую аннотацию @RunAs("SYSTEM"), но я не знаю, правильно ли это.

Мой класс планировщика

@RunAs("SYSTEM")
public class InboxScheduler {
    protected void inboxFileScan(Timer t) {
        receiptFilesService.receiptFiles();
    }
}

Мой EJB-класс

@RolesAllowed("SYSTEM")
public void receiptFiles() {
    // do anything
}

person Otávio Garcia    schedule 06.02.2011    source источник


Ответы (1)


Да, это правильное использование.

В разделе 12.3.4.1 спецификации EJB 3.2 говорится, что все методы вашего bean-компонента (включая методы обратного вызова с тайм-аутом) будут иметь идентификатор, определенный в run-as.

Из спецификации: Идентификатор запуска от имени применяется к корпоративному компоненту в целом, то есть ко всем методам бизнес-компонента, домашнему интерфейсу и интерфейсам компонентов, представлению без интерфейса, и/или конечная точка веб-службы; к методам прослушивателя сообщений компонента, управляемого сообщениями; и к методам обратного вызова тайм-аута корпоративного компонента; и все внутренние методы компонента, которые они, в свою очередь, могут вызвать.

person victor herrera    schedule 07.03.2011