Estou migrando aplicações desenvolvidas em PHP para uma aplicação Java com Web Start. Ainda vai demorar um bom tempo até que esteja tudo em Java, portanto para evitar que sejam feitas duas autenticações minha idéia é a seguinte: ao iniciar a aplicação Java seria verificado se o usuário já fez login no site. Em caso afirmativo, entra na aplicação. Em caso negativo, exibe o formulário de login.
O problema é detectar se o usuário está logado no site(uso variáveis de sessão). Alguma idéia?
Já precisei fazer uma coisa parecida uma vez. Eu tinha uma aplicação PHP que precisava gerar relatórios (mas o PHP é um lixo pra isso). Então desenvolvi meus relatórios no IReport e chamava eles de dentro do sistema em PHP. Porém também precisava saber se o cara estava logado.
A solução que desenvolvi foi: Ao chamar o relatório, o sistema em PHP gerava um cookie na máquina do usuário e logo em seguida chamava o .jsp pra gerar o relatório. Antes de exibir o relatório no .jsp eu lia esse cookie (que caso houvesse era pq o cara já estava logado) e apagava ele. E depois exibia o relatório!
Isso tá em produção até hoje e funciona perfeitamente!
Qualquer dúvida avisa ae.
Obs: Você não consegue comunicar uma sessão em PHP com uma sessão Java.
ziegfried
provavelmente há um servlet para login certo? nele vc põe:
Usuario usuario = new Usuario();
usuario.setPropriedade1(valor1);
usuario.setPropriedade2(valor2);
synchronized(request.getSession()) {
request.getSession().setAttribute("usuario", usuario);
}
no jsp:
<c:if test="${not empty usuario}">
ALGO QUE SÓ O USUÁRIO LOGADO PODE VER!
</c:if>
lembrando que para poder usar o <c:if> é necessário instalar a jstl, o que é explicado no tópico http://www.guj.com.br/posts/list/49936.java
boa sorte!
FkJ
Uma vez li sobre WDDX, o cara lia através do coldfusion uma sessão gerada pelo PHP, aí achei que tivesse como fazer algo parecido com Java…
Também tinha pensado num cookie, mas como faço a leitura dele? Estou usando J2SE 6. Pesquisando a respeito li sobre servlet, nele tem a classe Cookie, tem a classe HttpSession tb, mas não sei como utilizá-las.
Lembrando que pra isso os cookies tem que estar habilitados na máquina!
FkJ
Valeu pela força, mas não estou usando jsp. A aplicação é desktop executada com Java Web Start. Não tenho o pacote servlet instalado.
Adriano_Almeida
Putz… nem tinha lido… porque você não grava uma flag no banco de dados indicando que o cara está logado, e lê essa flag do banco na hora de mostrar a tela de login na sua outra aplicação?
FkJ
O problema é que eu não saberia quem está tentando acessar o sistema. Acho q tem q ser algo que fique no cliente msm, no caso um cookie.
Como faço para baixar / instalar o servlet?
FkJ
Instalei ele aqui, vou fazer alguns testes e falo o que consegui
_fs
Uma solução simples e rápida é ter uma tabela no banco de dados que o PHP e o Java acessam. O PHP marca a flag de logado, junto com o horário, e o Java checa essa flag.
maquiavelbona
Uma opção não muito elegante - na verdade, péssimamente elegante - é você enviar na url do PHP para o Java o código do cliente e um paramêtro junto com “prazo de validade”. Quando acessar, o java vai ler e decodificar a validade e poderás tentar assim fazer algo “alternativo”.
Sugeri uma gambiarra, mas podes pegar a idéia e melhorar.
Até!
FkJ
LIPE, o problema é que o tempo entre o usuário logar no site e entrar no sistema Java é indeterminado, e também pode ocorrer do usuário logar no site e não entrar no sistema, portanto fica difícil controlar esse flag.
O ideal seria cookie mesmo, porque posso tranquilamente condicioná-lo para ser destruído quando o navegador for fechado.
maquiavelbona, como faço para enviar a URL do PHP para o Java?
Como faço um request pelo servlet?
FkJ
Realizei diversos testes sem sucesso:
URLConnection para ler os cookies.
URLConnection para ler a saída de um script PHP.
Ambos não funcionam porque ao relalizar a conexão é como se o usuário estivesse entrando pela primeira vez no site, portanto variáveis de sessão e cookies condicionados ao login não existem.
Script PHP com as devidas consistências de login para processar o arquivo JNLP. Não funciona de jeito nenhum, muito estrahnho, dependendo do que digito no bloco de código PHP ocorre erro de interpretação do XML do JNLP. Mas pensando bem essa alternativa não é interessante porque o acesso ao sistema Java ficaria condicionado ao login no site. Minha intenção é que a validação do login seja feito no método main da classe principal do sistema, no qual a lógica seria a seguinte: Se logado, entra no sistema. Senão, exibe formulário de login.
Tag property no arquivo JNLP. Achei que dessa forma ia funcionar. Se eu definir o tipo de conteúdo como texto simples o JNLP com dados dinâmicos é exibido perfeitamente , mas se mudar para application/x-java-jnlp-file os dados dinâmicos simplesmente desaparecem. Poderia até ser algo relacionado ao buffer de saída, mas testei também passar o conteúdo todo do JNLP para uma varíavel concatenando com a variável de sessão desejada e nada.
A última alternativa: instalar o Tomcat para tentar usar servlets, mas preciso saber se ele funciona ao mesmo tempo com o apache 2, que está rodando o PHP, e mesmo se funcionar, ele seria capaz de me passar os dados do servidor para uma aplicação desktop?
FkJ
Resolvido. O problema é que o cache do java estava desativado ( :? ). Optei pela alternativa 4…