Problemas de seÇÃo (session) com java web start

7 respostas
F

Olá Pessoal!

Tenho uma Applet que funciona perfetinha e sua função é transferir um arquivo do usuário local pro servidor remotamente.

Então concluímos que seria melhor usar Java Web Start pra evitar de sempre fazer o download da Applet. O tempo passou a ser fator crítico do negócio.

A princípio simplesmente criei um arquivo .JNLP e a Applet funcionou parcialmente. O problema é que o Servlet que recebe de minha applet o arquivo faz pesquisa em atributos disponíveis na seção.

Aqui está o problema: se entendi, a partir do Web Start não faz sentido pesquisar seção (session) pois a não existe!

Eu tenho vários dados na seção e preciso deles.

Alguém tem alguma alternativa pra contornar isto sem a necessidade de reprogramar algo? Se não tiver, qual seria a alternativa em se tratando de reprogramação?

Muito Obrigado.

7 Respostas

pcalcado

Até onde eu sei, WebStart é uma ferramenta de deployment. Parece que você vai ter que mexer no seu applet para se comunicar com o servidor via HTTP ou algum outro meio…

[]s

F

pcalcado,

O problema não é me comunicar com o servidor. Continuo usando a mesma estrutura da Applet e a comunicação está perfeita. Sendo mais exato, não mexi numa linha de código da Applet pra fazê-la funcionar com o Java Web Start (JWS).

O problema surgiu num Servlet que, num trecho de código, tentar ler um atributo do objeto HttpSession session. Quem "chamou" o Servlet foi o aplicativo que roda sobre o JWS. Pelo que entendi, como foi um aplicativo que chamou a Session, esta é criada pela primeira vez e não recuperada da existente.

Pra facilitar o entendimento, é preciso dizer que primeiro acesso, através de login, uma aplicação através do browser (uso JSP) e numa das telas do sistema faço a chamada do aplicativo que roda através do JWS.

Quando fiz o primeiro acesso povoo a sessão do usuário. É um dos atributos da sessão que preciso recuperar no Servlet que "responde" a uma requisição do aplicativo que roda no JWS.
pcalcado

Deixa eu ver se entendi: você tem duas aplicações paralelas, browser e GUI tentando compartilhar uma sessão HTTP?

Você pdoe usar um parâmetro na URL como sessionID [acho que o container gera isso automagicamente…] para que o carinha tenha a sessão identificada em qualquer um dos aplicativos, mas vejo uns problemas:

[list]
1 - Como compartilhar este ID entre browser e aplicação (dizer à seu app para usar o valor X como sessionid)
2 - Segurança, issod eixa sua aplicação de pernas abertas. Se eu estiver na baia ao lado e olhar o fim da sua querystring posso me passar por você sem nem fazer login
[/list]

Você pode implementar uma segurança mais robusa, mas como fazer o browser trocar dados com uma aplicação?

Ah, e só uma correção: é Sessão :wink:

[]s

F

Primeiramente, obrigado pela correção. Percebi o erro de semântica.

Você entendeu corretamente. Fiz uma breve pesquisa sobre HttpSession e não vi como retornar uma sessão apartir de um ID.

Acredito que terei de criar arquivos temporários para recuperar as informações da sessão do browser pro aplicativo.

O aplicativo rodando no JWS ao realizar uma requisição através de um objeto HttpURLConnection, conecta-se a um Servlet, e neste farei a pesquisa no arquivo e recupero a informação que preciso.

Muito Obrigado.

PS. Ainda está em aberto a pergunta pra outras soluções.

pcalcado

É como quando o usuário não habilita cookies.

Como você vai fazer seu browser, assumindo que seja um padrão tipo IE ou Mozilla, escrever um arquivo no filesystem do cliente?

[]s

F

Não será meu browser que escreverá um arquivo.
O Arquivo será criado em algum Action do struts que criei.

pcalcado

Estou falando especificamente da variável, arquivo… o que quer que identifique a sessão e que precisa ser compartilhado pelo browser e pelo Swing.

Se você logar com o brwoser e obtiver um identificador de sessão qualquer, vamos supor que seja um número inteiro, você precisa fazer seu aplicativo Java ser informado deste número. Considerando as restrições de segurança de um browser… como faria isso?

[]s

Criado 1 de setembro de 2004
Ultima resposta 1 de set. de 2004
Respostas 7
Participantes 2