У меня есть вопрос относительно аутентификации и аннотации TimerService @Timeout:
В нашем приложении пользователи могут планировать выполнение задач с заданным интервалом. Они выбирают из списка задач, каждая задача связана с определенным EJB-компонентом в приложении. Когда пользователь нажимает кнопку сохранения, в службу Timer добавляется новый таймер, когда вызывается метод @Timeout, метод в EJB, из которого указанный пользователь вызывается с помощью метода @Timeout
Когда метод тайм-аута вызывается службой Timer, текущим принципалом является «ANONYMOUS». Это проблематично, если вам нужно вызывать какие-либо защищенные EJB-компоненты из метода тайм-аута. Можно ли изменить текущий принципал и роль на тот же принципал и роль, что и пользователь, создавший таймер?
@Singleton
@LocalBean
public class TestEJB
{
@Resource
SessionContext context;
@Resource
TimerService timerService;
@Timeout
public void execute(Timer timer) throws Exception {
//Get the current username
System.out.println(context.getCallerPrincipal().getName());
}
public void createScheduledTimer(ScheduleExpression e,String timerId) throws IllegalArgumentException, IllegalStateException, EJBException {
TimerConfig tc = new TimerConfig();
tc.setInfo(timerId);
tc.setPersistent(true);
timerService.createCalendarTimer(e, tc);
}
}