Tenho um EJB Scheduler:
@Schedule(second = "0", minute = "0", hour = "*")
protected void scheduledTimeout(final Timer t) {
[...]
branchRemote.doAnything();
}
E no meu EJB:
@Override
@RolesAllowed(BusinessConstants.ROLE_SYSTEM)
public void receiptFile(File file) {
System.out.println(context.getCallerPrincipal());
System.out.println(context.isCallerInRole(BusinessConstants.ROLE_SYSTEM));
}
Noto que quando eu rodo o EJB a o caller é sempre anonymous, sendo assim tenho sempre um acess denied quando tento rodar o EJB. Tentei usar a annotation @RunAs na classe scheduler, porém mesmo assim recebo um access denied. Se eu comento o RolesAllowed noto que o caller retorna como SYSTEM quando eu uso o RunAS, porém quando faço um isCallerInRole recebo um FALSE.
Como faço para fazer o controle de permissão? Eu não posso deixar esse método como “público”.