Dúvida sobre JAAS

Olá Pessoal,

Eu tenho um Projeto de EJB e um projeto WEB, ambos no mesmo EAR. Quando eu entro pelo brownser no projeto WEB, me autentico no JAAS e acesso os EJBs numa boa.
Em outro caso, quando eu tenho um projeto WEB fora do EAR, mas no mesmo Servidor de Aplicações (JBoss), ao navegar eu me autentico no JAAS mas quando ele vai realizar uma chamada para o EJB da um erro.

Minha pergunta é: Como eu passo o usuário logado para o EJB ao acessá-lo?

Grato,
David

Vc pode passar os parametros de autenticação pelo InitialContext, já realizei este procedimento em uma client que chamava um EJB remoto. Porém não me lembro exatamente quais parametros passar, nada que o google não resolva!!!

[quote=dgouvea]Olá Pessoal,

Eu tenho um Projeto de EJB e um projeto WEB, ambos no mesmo EAR. Quando eu entro pelo brownser no projeto WEB, me autentico no JAAS e acesso os EJBs numa boa.
Em outro caso, quando eu tenho um projeto WEB fora do EAR, mas no mesmo Servidor de Aplicações (JBoss), ao navegar eu me autentico no JAAS mas quando ele vai realizar uma chamada para o EJB da um erro.

Minha pergunta é: Como eu passo o usuário logado para o EJB ao acessá-lo?

Grato,
David[/quote]

As duas aplicações compartilham o mesmo domínio de segurança ? Vc. especifica isto no jboss-web.xml

Já tentou habilitar a “valve” de SSO do tomcat ?

Olá psevestre, eu habilitei a valve do Tomcat e funcionou o SSO. Agora todas as aplicações WEB são autorizadas depois de um único login. Obrigado pela dica.

Mas ainda estou com um problema. Quando eu vou chamar um EJB da camada WEB ele não passa para a chamada do EJB os dados de usuário e senha.

Pois o SSO só funciona para a parte WEB (Tomcat) para as chamadas de EJB não rola.

Properties propriedades = new Properties();
propriedades.put(Context.INITIAL_CONTEXT_FACTORY, Configuracao.getString("servidor.aplicacao.fabrica_contexto"));
propriedades.put(Context.PROVIDER_URL, Configuracao.getString("servidor.aplicacao.url"));
propriedades.put(Context.SECURITY_PRINCIPAL, "dgouvea");
propriedades.put(Context.SECURITY_CREDENTIALS, "******");
        	
String nomeJndi = Configuracao.getString("servidor.aplicacao.jndi") + "/" + Configuracao.getString("servidor.aplicacao.ejb");

ctx = new InitialContext(propriedades);

Estou passando os dados mas ainda sim não funciona. A não ser quando no meu LoginModule do JAAS eu seto as informações no SecurityAssociation

SecurityAssociation.setPrincipal(principal);
SecurityAssociation.setCredential(senha);

Assim funciona! mas o SecurityAssociation trabalha com ThreadLocal e o LoginModule fica em uma Thread muito baixa do JBoss, sendo assim ao recuperar a infomação do SecurityAssociation eu sempre pego a do ultimo usuário que se logou no LoginModule, independente da sessão que estiver trabalhando.

Minhas perguntas são:

  • Como passar as informações de usuário e senha na chamada do EJB?
  • Como recuperar essas informações dentro do EJB?

Já estou alguns dias fazendo pesquisas na Internet e trabalhando em cima disso.
Agradeço a todos pela ajuda, toda sugestão é bem vinda.