Redirecionamento automático no timeout da sessão (Servlet)  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
thiagocg
Virtual Machine Man
[Avatar]

Membro desde: 08/04/2006 11:07:07
Mensagens: 541
Localização: Campo Grande - MS
Offline

Olá pessoal, estou pensando em fazer o redirecionamento automático do usuário quando a sessão expirar, mas não estou conseguindo fazer, será que algum dos caros colegas ja fez isto alguma vez ou teria alguma dica pra dar?

Na realidade essa idéia surgiu por um problema que encontrei utilizando um componente ajax, no caso um combo(select) que atualiza outro combo(select) por ajax, dai quando cai no filtro e a sessão ja esta expirada, ele iria apenas redirecionar para a página de login, mas como a view ja esta renderizada ele não consegue efetuar a ação e o componente que esperava os dados exibe um erro para o usuário.

Dai a idéia do redirecionamento automatico para evitar esse erro.

Estou usando servlet e jsp, tenho um filtro implementado e funcionando que é exatamente o que barra as solicitações quando a sessão expira.

Qualquer ajuda é bem vinda!

Grato a todos!

________________________________
Thiago Araujo da Silva
Analista de Sistemas
Tecnólogo em Processamento de Dados (Estácio - CG/MS)
Especialista em Desenvolvimento de Aplicações em Java (Uniderp - CG/MS)
[Email] [MSN]
viniciusfaleiro
Virtual Machine Man
[Avatar]

Membro desde: 22/03/2008 20:07:50
Mensagens: 524
Offline

Pelo que eu entendi ao mudar o item do primeiro combo ele irá atualizar o segundo por ajax certo? Dai.. nesse caso.. se a sessão expirou ele cai no filter certo???? Dai o fato de cair no filter com a solicitação ajax não redireciona a página???

Ou seja.. se vc não estivesse utilizando ajax vc iria ser redirecionado certo???

Cara.. não sei se é isso ai (programo pra web a uns 2 meses). Você utiliza algum framework pra ajax?Se não utiliza nenhum framework... Vc já tentou no filtro.. se a sessão expirou ao inves de utilizar o sendRedirect.. pegar o Writer do response e devolver um javascript de redirecionamento????

This message was edited 1 time. Last update was at 09/12/2009 16:52:57


Linkedin: http://www.linkedin.com/pub/vinicius-faleiro/32/697/624
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

Não entendí muito bem a questão.. porque não utilizar o próprio filtro que checa o estado da sessão para redirecionar a requisição (usando RequestDispatcher, por exemplo) ?

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

viniciusfaleiro
Virtual Machine Man
[Avatar]

Membro desde: 22/03/2008 20:07:50
Mensagens: 524
Offline

É que pelo que eu entendi.. e já tive esse problema.. não consigo redirecionar a página do cara se a solicitação é em ajax.. Utilizando o arquivo js pra criar o XMLHTTPrequest la.. O único jeito que consegui foi mandando uma resposta pra página com um javascript pra redirecionar...

Axo que deve ser isso..sei lá

Linkedin: http://www.linkedin.com/pub/vinicius-faleiro/32/697/624
thiagocg
Virtual Machine Man
[Avatar]

Membro desde: 08/04/2006 11:07:07
Mensagens: 541
Localização: Campo Grande - MS
Offline

Olá viniciusfaleiro, seguem respostas a seus questionamentos:

Pelo que eu entendi ao mudar o item do primeiro combo ele irá atualizar o segundo por ajax certo?

Correto!

Dai.. nesse caso.. se a sessão expirou ele cai no filter certo????

Correto!

Dai o fato de cair no filter com a solicitação ajax não redireciona a página???

Exatamente isso que não acontece, como a view ja esta renderizada e o retorno é apenas um xml para preenchimento do outro combo, não ocorre o redirecionamento e o componente que aguarda os dados gera um erro para o usuário.

Ou seja.. se vc não estivesse utilizando ajax vc iria ser redirecionado certo???

Correto, o filtro esta fazendo o redirecionamento corretamente em todos os outros casos, apenas em relação ao ajax que estou tendo este problema.

Você utiliza algum framework pra ajax?

Utilizo uma biblioteca de componentes chamada DHTMLX, ela é proprietária e pobre de documentação.

Vc já tentou no filtro.. se a sessão expirou ao inves de utilizar o sendRedirect.. pegar o Writer do response e devolver um javascript de redirecionamento????

Na verdade eu queria avisar ao usuário que a sessão expirou e não gerar o erro pra ele na página. Como funciona isso de devolver javascript de redirecionamento???

Obrigado pela ajuda!

________________________________
Thiago Araujo da Silva
Analista de Sistemas
Tecnólogo em Processamento de Dados (Estácio - CG/MS)
Especialista em Desenvolvimento de Aplicações em Java (Uniderp - CG/MS)
[Email] [MSN]
thiagocg
Virtual Machine Man
[Avatar]

Membro desde: 08/04/2006 11:07:07
Mensagens: 541
Localização: Campo Grande - MS
Offline

Olá asaudate, o filtro funciona normalmente para todos os outros casos, mas quando utilizo uma chamada ajax para preencher qualquer outro componente ele não faz a requisição pois a view ja esta renderizada.

Abaixo coloquei a linha que cai quando a sessão expira.

Esse objetoSessao fica dentro da sessão e quando a sessão expira ele se torna null.
Mas o forward não faz o redirecionamento

This message was edited 1 time. Last update was at 09/12/2009 17:22:53


________________________________
Thiago Araujo da Silva
Analista de Sistemas
Tecnólogo em Processamento de Dados (Estácio - CG/MS)
Especialista em Desenvolvimento de Aplicações em Java (Uniderp - CG/MS)
[Email] [MSN]
vi-gb
JavaChild
[Avatar]

Membro desde: 14/01/2009 12:13:16
Mensagens: 140
Offline

Eu faço assim, coloco este codigo no arquivo web.xml do projeto, passando a pagina a exibir.


Vivian G.
[Yahoo!] [MSN]
thiagocg
Virtual Machine Man
[Avatar]

Membro desde: 08/04/2006 11:07:07
Mensagens: 541
Localização: Campo Grande - MS
Offline

Olá vi-gb, mas isso não funcionaria apenas para projetos em jsf?

Estou usando apenas servlet e jsp.

Grato pela ajuda!

________________________________
Thiago Araujo da Silva
Analista de Sistemas
Tecnólogo em Processamento de Dados (Estácio - CG/MS)
Especialista em Desenvolvimento de Aplicações em Java (Uniderp - CG/MS)
[Email] [MSN]
vi-gb
JavaChild
[Avatar]

Membro desde: 14/01/2009 12:13:16
Mensagens: 140
Offline

Verdade, desculpe.
Mas segundo este link parece que da pra usar pra jsp tambem:
http://java.sun.com/developer/EJTechTips/2003/tt0114.html

Vivian G.
[Yahoo!] [MSN]
rbcunha
Debugger
[Avatar]

Membro desde: 07/07/2004 15:04:58
Mensagens: 50
Offline

thiagocg wrote:
Na realidade essa idéia surgiu por um problema que encontrei utilizando um componente ajax, no caso um combo(select) que atualiza outro combo(select) por ajax, dai quando cai no filtro e a sessão ja esta expirada, ele iria apenas redirecionar para a página de login, mas como a view ja esta renderizada ele não consegue efetuar a ação e o componente que esperava os dados exibe um erro para o usuário.


Como a requisição é via AJAX você vai ter que enviar um retorno informando que a sessão expirou e tratar este retorno com javascript.
Este tratamento pode se uma simples mensagem informando que a sessão expirou ou redirecionando para tela de login.
Você poderia criar um filtro para tratar requisições AJAX e outro filtro para requisições "normais" (neste caso o filtro que já existe).




[Email]
viniciusfaleiro
Virtual Machine Man
[Avatar]

Membro desde: 22/03/2008 20:07:50
Mensagens: 524
Offline

Foi o q eu falei.. eu devolvo uma função em javascript pra fazer isso.. Se vc usa o próprio js pra fazer a requisição vai ter q tratar a resposta caso ela for um script... senão não funciona. Faz assim.. vou te passar o meu script.. olha ai....

Essa função te dá a capacidade de responder scripts para o ajax



E essa é a requisição em si. Veja que dependendo da flag que eu chamar eu escolho para tratar ou não a resposta... No caso ela trata se for um script (vc tem q ativar o flag)


Linkedin: http://www.linkedin.com/pub/vinicius-faleiro/32/697/624
thiagocg
Virtual Machine Man
[Avatar]

Membro desde: 08/04/2006 11:07:07
Mensagens: 541
Localização: Campo Grande - MS
Offline

Olá viniciusfaleiro, obrigado pela ajuda.

Não tenho muita intimidade com javascript, trabalhei mais de ano com jsf com richfaces, e as chamadas ajax dele é um pouco diferente, mais simples digamos.

E por não ter muita intimidade com javascript é que não entendi muito bem onde se encaixariam as funções javascript que vc enviou.

Por enquanto apenas aumentei o timeout pra não ter esse problema, mas quero resolver isso.

Grato pela ajuda de todos!

[]'s

________________________________
Thiago Araujo da Silva
Analista de Sistemas
Tecnólogo em Processamento de Dados (Estácio - CG/MS)
Especialista em Desenvolvimento de Aplicações em Java (Uniderp - CG/MS)
[Email] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team