[RESOLVIDO]pegar objeto Principal na camada de persistência

1 resposta
G

Pessoal,

alguém sabe como eu faço pra pegar o objeto Principal na camada de persistência?
acontece que minha aplicação não pode depender do request.getUserPrincipal que vem da api de servlet.
preciso de alguma forma recuperar o contexto de segurança e aí obter o usuário autenticado.
tentei fazer da seguinte forma:

AccessControlContext  accessControlContext = AccessController.getContext();  
Subject subject = Subject.getSubject(accessControlContext);  
for( Principal principal: subject.getPrincipals() ){  
    System.out.println("Este é o principal: " + principal.getName());  
}

mas o getSubject retorna um objeto null.

1 Resposta

G

Pessoal,

bom após muita peregrinação, descobri o problema.
primeiro de tudo é que eu não posso pegar o usuário lá na camada de persistencia como estava pensando, isso deve ser feito na camada EJB por meio do SessionContext.getCallerPrincipal();
mas essa birosca está bugada na versão do jboss que utilizo.
acontece que a versão do Jboss que utilizo a 5.0.1.GA possui um BUG conforme relatado pela própria JBOSS, que só foi resolvido na versão 6.
para contornar isso eu teria de sobrescrever algumas classes. como meu processo de login é via Kerberos, preferi fazer uso da api de servlet mesmo e obter o usuário logado.

mais feio de tudo isso foi a redhat lançar o 5.0.1.GA com esse bug, sabiam do BUG e a prova disso é o fato do login-module aceitar como parâmetro a classe Principal a ser utilizada(ou seja, já sabiam que o negócio tava com pau nos EJB).

mas quem precisar fazer a mesma coisa, basta user SessionContext.getCallerPrincipal(); na camada EJB que funciona nas versões 6 ou superior do JBoss.

esqueci de colocar os links:
https://issues.jboss.org/browse/EJBTHREE-1756 (exemplo de implementação do CustomPrincipal)
https://community.jboss.org/wiki/UsingCustomPrincpalsWith
https://community.jboss.org/message/141590#141590 (discussão sobre o bug)

Criado 30 de maio de 2012
Ultima resposta 1 de jun. de 2012
Respostas 1
Participantes 1