Aviso de sessão expirada  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

Olá a todos... vou explicar o que eu fiz e o que esta faltando fazer...

Estou usando JSF 2.1 e primefaces 2.2.1, implementei em meu site uma verificação de aviso de sessão expirada usando Filter, nao vou colar a classe inteira pra dar uma economizada, se for o caso eu posto ela depois, mas enfim, tenho essa classe que uso pra verificar se o usuario tem acesso a página solicitada e agora para verificar se a sessão expiroupra quem usa, sabe q a classe possui os métodos init, doFilter e destroy e no doFilter é onde eu faço as validações, uso o seguinte código para verificar se a sessão expiroue depois dependendo do valor dessa String oQueFazer, eu redireciono pra algum lugar, no caso a pagina sessãoExpirada.xhtml.

isto está funcionando com links, mas não com requisições ajax, por exemplo, combobox estado atualizando combobox cidades, se a sessão está expirada, ele nao atualiza o combobox cidade mas tbem nao redireciona, nem da erro nem nd...
o que eu preciso saber é como verificar se a sessão está expirada em requisições ajax, alguem tem alguma idéia ?

Desde já grato t+
[MSN]
tuliomonteazul
Debugger
[Avatar]

Membro desde: 07/06/2011 09:55:33
Mensagens: 50
Offline

Cara, tenta fazer com javascript.
O JQuery tem a função ajaxError, como o primefaces usa JQuery, ele deve ter algo parecido.
Usando o sendRedirect para as requisições ajax não vai funcionar porque elas não tem "poder" de alterar a página, mas se você tratar o erro em javascript deve funcionar.

Acho que dá até pra você detectar no seu Filter se uma requisição é em javascript vendo se o header possui XMLHttpRequest, por exemplo:

Esse post também pode te ajudar: http://stackoverflow.com/questions/6705028/redirecting-a-web-client-from-a-servlet-filter-client-server-connection-via-aja

This message was edited 1 time. Last update was at 17/01/2012 08:11:47

cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

o problema q estou tendo é que nao consigo capturar o estado da sessão do faces, ó codigo abaixo sempre imprime nulle se eu usartbem nao funciona, o httpsession não é o mesmo que a session do faces...
a unica maneira q eu consigo verificar o estado da sessão do faces na minha classe filter, é usando aquele try catch sitado no primeiro post

Alguma idéia pra verificar o estado da sessão dentro do if

vlw pela resposta t+
[MSN]
alias
Virtual Machine Man

Membro desde: 11/06/2007 11:09:34
Mensagens: 596
Offline

Cara, nao entendi direito o problema. Parece que voce já tá com a faca e queijo na mao, meu velho.

No seu filtro, voce recebe um ServletRequest (que é um HttpServletRequest). Esse cara vai ter um metodo getSession(), que irá te retornar a sessão corrente ou criará uma (por padrao).

Entao, suponho que voce poderia fazer algo assim no seu filtro:



Ademais, o erro que está tratando, ViewExpiredException, não é necessariamente a mesma coisa que uma sessão expirada

Espero ter ajudado.
cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

affff, consegui enchergar onde eu tava errando depois da sua mensagem alias, nao tinha atentado ao parametro para criar sessao no metodo getSession(false) eu tava usando sem parametro, ai ele sempre criava uma nova sessao, então no final das contas ficou assimmas ele nao consegue redirecionar se a sessao estiver terminada, qual é a maneira correta agora de proceder? criar uma nova sessão antes de redirecionar para a pagina de sessãoExpirada, acho isso meio fora de lógica, o erro que acontece é
java.lang.IllegalStateException: Cannot create a session after the response has been committed
como proceder agora, nao sei...

se puderem me ajudar, agradeço, vou continuar dando uma pesquisada aqui pra ver se encontro a solução...
vlw t+
[MSN]
alias
Virtual Machine Man

Membro desde: 11/06/2007 11:09:34
Mensagens: 596
Offline

Vixe, essa exceção é um capeta hehe, mas é exatamente o que a descrição diz, sua aplicação está tentando manipular a resposta após ela ter sido despachada, talvez em algum filtro? Tem mais filtros aí no seu projeto?

Coloque ai o codigo desse seu xhtml e a pilha de erro (se nao forem muito grandes , brincadeira, poe aí que a gente tenta ajudar)
cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

só nao repara que ta uma bagunça, de tanto teste q to fazendo aqui kkkkk depois eu vou melhorar o codigo assim q descobrir como as coisas funcionam
metodo doFiltere o xhtm por exemplo o combobox de estado pra atualizar cidades
[MSN]
alias
Virtual Machine Man

Membro desde: 11/06/2007 11:09:34
Mensagens: 596
Offline

Cara, veja que após o redirect voce chama o metodo doFilter() do FilterChain, que vai invocar o resto da pilha de filtros e continuar o processo de renderização. Voce NAO pode fazer isso, uma vez feito o redirect.
cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

ai jesuis, hahah perai, essa é a primeira classe de filtro q to fazendo na vida, to meio perdido, vamos com calma, vamos nos concentrar no trecho de código abaixo o que tiver abaixo desse codigo já esta funcionado, ou seja, as validaçoes de usuario logado e permissões de acesso as paginas...

o que eu preciso agora é no caso de uma requisição ajax, se a sessão estiver = null redirecionar para a pagina sessaoExpirada...
[MSN]
cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

do jeito q tah ali, usando resp.sendRedirect("sessaoExpirada.xhtml") eu obtenho a seguinte excessao
17/01/2012 16:52:00 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/sessaoExpirada.xhtml]
java.lang.IllegalStateException: Cannot create a session after the response has been committed
tah blz, agora eu tenho q fazer o q? criar uma nova session antes de redirecionar ?
[MSN]
alias
Virtual Machine Man

Membro desde: 11/06/2007 11:09:34
Mensagens: 596
Offline

pois é, mas veja o seu código

voce identificou que a sessao expirou. ok.
voce fez o response.sendRedirect("suapagina.xhtml"). ok.

seguindo no codigo, voce tem um



entendeu? voce está fazendo o redirect, ok, mas está mandando a requisição corrente continuar...

tenho uma outra suspeita sobre o erro, mas tentemos essa opção primeiro...vamos fazer um laboratorio

Espero ter ajudado...

This message was edited 1 time. Last update was at 17/01/2012 15:53:30

cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

aaaaaaaaaaaaah bem observado, kkk ja estou testando
[MSN]
cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

do jeito q eu fiz agora, ele nem se quer abre a pagina inicial, pois se eu verificar se a sessao é null e redirecionar pra sessaoExpirada.xhtml logo quando carregar a pagina inicial a session ainda é null

o problema é q ao mudar de HttpSession session = req.getSession(); para HttpSession session = req.getSession(false); ele nao está mais criando a session ao carregar a pagina inicial
[MSN]
cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

nao nada a ver esse ultimo post ai, tah errada essa logica...
[MSN]
cleiton herrmann
JavaEvangelist
[Avatar]

Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline

tah, dei uma arrumada na logica e agora tah assimnovamente cai no problema inicial, para links funciona, redireciona certinho para a sessaoExpirada.xhtml, mas no caso das requisições ajax ele nao redireciona, nao da erro nao faz nd, nao sei como fazer pra redirecionar no caso do cara clicar no combobox estados por ex, as cidades nao atualizam, nao da erro, nao redireciona...
na linha 13, pq ela nao redireciona ? isso q eu nao intendo, os outros sendRedirect funcionam
[MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team