Há muito tempo tenho usado o RunAs em testes esporádicos em minhas aplicações com EJB, e funciona bem quando quero simular algum usuário.
Agora em uma aplicação minha tenho vários métodos que são invocados apenas por EJB Schedulers. Então anotei esses métodos no EJB como @RolesAllowed(“SYSTEM”) e no meu Scheduler anotei @RunAs(“SYSTEM”) porque sempre que um Scheduler chama meus métodos o Principal retornado é ANONYMOUS. E não quero deixar meus EJBs aberto para um ANONYMOUS.
Porém sempre pensei no RunAs como para testes, e a documentação não é bem clara se realmente RunAs é apenas para testes ou posso usar em ambiente de produção normalmente com o security manager ativo.
Estou certo ou errado? Posso usar normalmente RunAs ou há restrições quando a ele? Ou há alguma outra forma de rodar um scheduler como um “usuário de sistema”?
Não conheço muito bem esse mecanismo, mas se não me engano, ele é feito para rodar com JAAS, não?
[]´s
[quote=asaudate]Não conheço muito bem esse mecanismo, mas se não me engano, ele é feito para rodar com JAAS, não?
[]´s[/quote]
Sim, exatamente. Ele valida, no caso do RolesAllowed(“TESTE”) se o atual Principal possui a role TESTE.
[quote=garcia-jj][quote=asaudate]Não conheço muito bem esse mecanismo, mas se não me engano, ele é feito para rodar com JAAS, não?
[]´s[/quote]
Sim, exatamente. Ele valida, no caso do RolesAllowed(“TESTE”) se o atual Principal possui a role TESTE.[/quote]
Então, como o JAAS se integra com alguns mecanismos bem interessantes (tipo LDAP), porque não usar o mecanismo todo em produção? 
As anotações do pacote javax.annotation.security usam o JAAS para autorização, porém não fazem parte do JAAS.
Acho que eu não expliquei direto, escrevi o post no meio da correria. Na documentação do RunAs há algo assim:
http://download.oracle.com/docs/cd/E17410_01/javaee/6/api/
Ou seja, alí diz que permite ao desenvolvedor testar um EJB forçando ele a rodar como outro Principal. Isso eu sempre usei mesmo para testes, porém estou na dúvida se posso usar assim normalmente sem violar a segurança do sistema, pois eu estou forçando um ANONYMOUS a ser outro usuário. Fiz isso porque não achei outra forma de rodar o scheduler como se fosse um “usuário sistema”.
Minha preocupação é no sentido disso ser portável (embora esteja na spec) e se há problemas nisso rodando em ambiente com o security-manager ativo. Procurei na documentação algo sobre isso, mas não achei nada muito claro se há problemas ou não.
Nao vejo nenhum problema em rodar com RunAs
Mas sempre que voce “forca” algo, voce precisa se certificar de que essa informacao eh valida 100% do tempo. No seu caso, significa se assegurar que somente o scheduler vai chamar este EJB.