terça-feira, 23 de dezembro de 2008

Portlets acessando LDAP

Um autenticador LDAP é peça fundamental em qualquer arquitetura que visa ter um ponto centralizado de autenticação. O WebSphere Portal permite configurar o seu repositório de autenticação apontando para um LDAP de forma nativa.

Entretanto há situações em que voce precisa acessar o LDAP diretamente por meio de um portlet. Há várias bibliotecas na internet com sugestões de conexões, mas a mais recomendada para o ambiente WebSphere é utilizar o próprio mecanismo de JNDI disponibilizado pelo application server.

Abaixo um código de exemplo de como fazer este acesso.

//* Indica propriedades do LDAP
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=ibm,dc=com");
env.put(Context.SECURITY_CREDENTIALS, "password");

try {
//* Permite enviar controles na busca do LDAP. Exemplo: SORT
Control[] connectionControls = null;

LdapContext ctx = new InitialLdapContext(env, connectionControls);
Attributes attrs = ctx.getAttributes("uid=alexbc,ou=users,dc=ibm,dc=com");

System.out.println("sn: " + attrs.get("userPassword").get());
System.out.println("sn: " + attrs.get("cn").get());

} catch (NameNotFoundException nnf) {
System.out.println("Elemento nao encontrado");

} catch (NamingException e) {
System.err.println("Erro no acesso LDAP: " + e);
}

segunda-feira, 8 de dezembro de 2008

Portlets chamando EJB

A arquitetura JEE (Java Enterprise Edition) prevê o uso de EJB's para o tratamento de lógicas de negócio e lógica de persistência.

Os portles, por serem especializados na camada de apresentação podem fazer uso deste tipo de componente para apresentação dos dados.

Neste panorama uma arquitetura recomendada é usar EJB's em uma JVM diferente da JVM utilizada para rodar os portlets. Para implementar esta arquitetura é necessário realizar uma configuração no Websphere para impedir que os CSIv2 enviem credencias de stub de cliente. O procedimento completo para realizar esta configuração pode ser visto no link abaixo:

http://www-01.ibm.com/support/docview.wss?uid=swg21218843

O código para chamar o EJB no portlet está abaixo:

Hashtable env= new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, "iiop://servidorEJB:10031");

InitialContext context= new InitialContext(env);
String jndiName= "ejb/aplicacao/ComponentFacade";

Object objRef = context.lookup(jndiName);
ComponentFacadeHome ejbHome= (ComponentFacadeHome) PortableRemoteObject.narrow(objRef, ComponentFacadeHome.class);
ComponenttFacade remote= (ComponentFacade)ejbHome.create();

ParametersTO netParameter = remote.getVerDados(valor);