Invocar EJB remoto com JAAS no GlassFish 3.1.2

4 respostas
fbrissi

Boa tarde a todos........

Já li muitos fórom a fim de tentar resolver meu problema. Se alguém souber me disser qual o problema, fico grato.

Estou usando o GlassFish 3.1.2, e criei um JDBCRealm para autenticação. No meu EJB adicionei a seguinte anotação:
@RolesAllowed({"S", "A", "U"})
Em meu EAR onde encontra-se meu EJB adicionei ao diretório META-INF o arquivo glassfish-application.xml, com o seguinte conteudo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd">
<glassfish-application>
    <realm>default</realm>
</glassfish-application>

O deploi é feito sem erro nenhum.

No client tenho o arquivo auth.conf com o seguinte conteúdo:
default { 
        com.sun.enterprise.security.auth.login.ClientPasswordLoginModule required debug=false; 
};
E finalmente tenho o meu loockup no cliente:
Properties properties = new Properties();

        System.setProperty("java.security.auth.login.config", ContextHelper.class.getResource("/auth.conf").getPath());

        properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
        properties.setProperty(Context.URL_PKG_PREFIXES, "com.sun.enterprise.naming");
        properties.setProperty(Context.STATE_FACTORIES, "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
        properties.setProperty(Context.PROVIDER_URL, "localhost:3700");

        ProgrammaticLogin programmaticLogin = new ProgrammaticLogin();
        programmaticLogin.login("usuario","senha".toCharArray());

        InitialContext ctx = new InitialContext(properties);

        ctx.lookup("java:global/appName/moduleName/beanName!interfaceName");

Ao fazer o lookup tenho erro tanto no client como no servidor.

Client:
15:32:40,756  INFO ContextHelper:21 - connect url=null:null
[Root exception is java.rmi.AccessException: CORBA NO_PERMISSION 0 No; nested exception is: 
	org.omg.CORBA.NO_PERMISSION: ----------BEGIN server-side stack trace----------
Server (apenas isso):
[#|2012-08-31T15:23:44.834-0300|SEVERE|glassfish3.1.2|javax.enterprise.system.core.security.com.sun.enterprise.iiop.security|_ThreadID=153;_ThreadName=Thread-2;|iiop.login_exception|#]

Será que alguém tem alguma idéia do que possa estar errado?

Agradeço a todos que se interessarem pelo assunto.

[color=red]obs: se remover a anotação @RolesAllowed({"S", "A", "U"}) funciona corretamente.[/color]

4 Respostas

tveronezi

O usuário “usuario” não faz parte de nenhum dos grupos “S”, “A” ou “U”.

fbrissi

Faz sim, na verdade estou migrando para glassfish, a aplicação já rodou no jBoss 5 e no jBoss 7. A não ser que eu tenha configurado errado meu realm, pois como pode ver em lugar algum do código é informado qual realm usar, eu não encontrei uma referência para isso. Testei configurar o log para exibir o SQL gerado no servidor, mas não consegui, coloquei vários log para ALL, a fim de tentar exibir mas não consegui. Pensando no que você disse talvez esteja faltando informar qual realm utilizar, mas não sei como faze-lo.

Você sabe como informar o realm e qual log deve incluir para exibir o SQL gerado pelo server?

Obrigado pela ajuda.

tveronezi

Isso é diferente pra cada servidor. GlassFish eu não conheco, apenas o Openejb/Tomee…

http://openejb.apache.org/examples-trunk/testing-security/README.html
http://openejb.apache.org/examples-trunk/testing-security-2/README.html
http://openejb.apache.org/examples-trunk/testing-security-3/README.html

Mas existe um link onde vc pode encontrar mais informações sobre glassfish:
http://docs.oracle.com/javaee/6/tutorial/doc/bnbxj.html#bnbxr

fbrissi

Obrigado pelos link, já tinha lido-os antes.

Consegui avançar um pouco, consegui fazer a conexão, porém estou com outro problema agora. Quando faço a conexão local, funciona corretamente, mas quando o servidor está em outra máquina, fica muito tempo aguardando o retorno até que dá o seguinte erro:

Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.provider.url=192.168.1.233:3700, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is org.omg.CORBA.COMM_FAILURE: WARNING: IOP00410019: Communications timeout waiting for response. Exceeded 1.800.000 milliseconds vmcid: OMG minor code: 19 completed: Maybe] at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:352) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504) ... 63 more

Alguém sabe qual pode ser o problema?

Criado 31 de agosto de 2012
Ultima resposta 10 de set. de 2012
Respostas 4
Participantes 2