Transferir usuário através de Cookie

13 respostas
T

Pessoal e possível transferir o usuário de uma aplicação para outra através de cookie ?

alguém tem um exemplo de fazer isso ?

13 Respostas

R

Thiago, segue abaixo

Grava o Cookie

/FacesContext
FacesContext context = FacesContext.getCurrentInstance();  

//Cria cookie
Cookie ck = new Cookie("cookie", "Valor que vc quer Setar/Receber do Cookie");  
ck.setMaxAge(-1); //tempo de vida

//Adiciona
((HttpServletResponse) context.getExternalContext().getResponse()).addCookie(ck);

Ler o Cookie

FacesContext facesContext = FacesContext.getCurrentInstance();  
HttpServletRequest request = (HttpServletRequest)facesContext.getExternalContext().getRequest();  

//obtem a lista de cookies
Cookie[] cookies = request.getCookies();

//foreach
for(Cookie cookie : cookies){
	if(cookie.getName().trim().equalsIgnoreCase("cookie")){
		System.out.println("Valor do cookie: "+cookie.getValue());
	}
}
RoxRicardo

Posso estar errado, mas o cookie inserido por um servidor, fica disponível apenas para aquele servidor não?
Não seria uma possibilidade enviar via URL um pedido de login para a outra aplicação? Utilizando criptografia claro.

tmvolpato

utilizar cookie para isso significa que a segurança da sua app
vai ser zero…

essa não é a melhor maneira de se fazer isso
cookie tem outra finalidade para isso não se aplica
a não ser que seja para estudo…

T

RoxRicardo como que posso pegar o usuário na URL ?

Estava vendo que com o Jboss tem um sessionID que poderia fazer isso mas não achei nada que me ajudasse,

alguém poderia dar um exemplo ? ou alguma outra solução que consigo fazer o que preciso ?

A

Fora que se usar cookie em dispositivos como celular/tablet não rola (principalmente Apple),
As opções são sessão na aplicação, sessão no banco ou os dois juntos.

  • Estive em um projeto recentemente que algumas informações eram setados no cookie e tivemos inúmeros problemas com isso (acesso mobile), como disse a solução foi setar sessão na aplicação e no banco.
    PS: Projeto .Net
RoxRicardo

thiagoRibeiro:
RoxRicardo como que posso pegar o usuário na URL ?

Estava vendo que com o Jboss tem um sessionID que poderia fazer isso mas não achei nada que me ajudasse,

alguém poderia dar um exemplo ? ou alguma outra solução que consigo fazer o que preciso ?


Olá Thiago, aqui em meu trabalho recentemente tive essa necessidade, a intenção era que ao se logar com um usuário em um sistema, fosse possível acessar um outro sistema sem necessidade de login.
Neste caso os dois sistemas tinham o cadastro do usuário e ambos com a mesma senha, onde o sistema 1 era a porta de entrada e existiam links para o sistema 2, assim ao clicar no link para o sistema 2 era passado como parâmetro na URL tanto o login do usuário quanto a senha criptografada em MD5.
No sistema 2 existia um filtro para interceptar uma requisição de login, assim o sistema 2 pegava o login do usuário, fazia uma consulta em sua base e gerava o MD5 da senha naquele sistema, se as senhas forem iguais o sistema permite o login.

Entretanto esta é uma solução que se encaixa perfeitamente pra mim e muito pouco provavelmente pra você, se pudesse explicar qual o seu problema, situação dos dois sistemas, como esse acesso vai acontecer talvez possamos ajudar melhor.

A

Sugestão, se for realizar o controle de usuários em diferentes aplicativos, uma boa idéia é usar OpenLDAP

T

RoxRicardo,

o que preciso e exatamente isso que vc já fez,

Tenho um sistema A que valida o usuário do AD (active direct) validado o usuário no sistema A a pagina para para o menu,

no menu qualquer opção que o usuário escolhe ele e redirecionado para o sistema B,

e preciso pegar o usuário que foi validado no sistema A e recuperar no Sistema B,

como faço isso usando a solução que vc já implementou ?

alcionj

Não achei a solução do site que vc me passou ?

e apenas umas referencia do que posso usar ou tem algo lá que posso implementar ?

RoxRicardo

thiagoRibeiro:
RoxRicardo,

o que preciso e exatamente isso que vc já fez,

Tenho um sistema A que valida o usuário do AD (active direct) validado o usuário no sistema A a pagina para para o menu,

no menu qualquer opção que o usuário escolhe ele e redirecionado para o sistema B,

e preciso pegar o usuário que foi validado no sistema A e recuperar no Sistema B,

como faço isso usando a solução que vc já implementou ?


Consegue fazer como já implementei, mas no seu ambiente, como está validado no AD ti aconselho a API ou pode tentar o OpenLDAP conforme falado pelo @alcionj.
OpenLDAP nunca utilizei mas em um ambiente onde tudo era AD já utilizei o JCIFS para consultar se um determinado usuário já estava logado no AD.

T

RoxRicardo,

eu tentei o OpenLDAP mas não consegui evoluir, estou usando o Jboss 7, nele tenho um arquivo de configuração o standalone.xml nele adicionei a configuração abaixo,

em meu sistema criei um arquivo jboss-web.xml e acrescentei isso

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <security-domain>java:/jaas/my_ldap_security_domain</security-domain>
</jboss-web>

Mas dai não sei como eu poderia pegar o usuário conforme a configuração no standalone.xml

<security-domain name="my_ldap_security_domain" cache-type="default">
                    <authentication>
                        <login-module code="Remoting" flag="optional">
                            <module-option name="password-stacking" value="useFirstPass"/>
                        </login-module>
                        <login-module code="LdapExtended" flag="required">
                            <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
                            <module-option name="java.naming.provider.url" value="ldap://00.00.0.000:389"/>
                            <module-option name="java.naming.security.authentication" value="simple"/>
                            <module-option name="baseCtxDN" value="dc=AAAA-AAAAA,dc=com,dc=br"/>
                            <module-option name="baseFilter" value="(uid={0})"/>
                            <module-option name="roleFilter" value="(member={1})"/>
                            <module-option name="roleAttributeID" value="cn"/>
                            <module-option name="throwValidateError" value="true"/>
                            <module-option name="searchScope" value="ONELEVEL_SCOPE"/>
                        </login-module>
                    </authentication>
                </security-domain>

vc consegue me ajudar com essa solução que comecei ou até mesmo com a que vc me indicou JCIFS

RoxRicardo
Bom, pra começar se você vai realmente fazer uma integração LDAP você precisa dos dados de acesso ao mesmo,

java.naming.provider.url - Endereço e porta do AD;

java.naming.security.authentication - Tipo de autenticação;

baseCtxDN - Domínio de busca

Talvez na api do OpenLDAP vc consiga o que cada um é e exemplos de como preencher, no JCIFS não é muito diferente disso não. Tenha em mente que integrações com servidor LDAP requerem um servidor LDAP online (o que parece obvio mas algumas pessoas se esquecem).

T

As informações de IP, domínio etc… eu tenho, o que preciso e ajustar o q fiz ou refazer caso esteja errado,

tem alguma sugestão para eu implementar ?

T

Ninguém tem alguma sugestão ?

Criado 16 de setembro de 2013
Ultima resposta 18 de set. de 2013
Respostas 13
Participantes 5