| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 07:31:03
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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+
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 08:11:17
|
tuliomonteazul
Debugger
![[Avatar]](/images/avatar/6feda8a12bf7bc8529f2ea910b2ebebf.png)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 12:14:06
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 12:26:51
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 13:12:46
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 13:38:01
|
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)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 14:06:07
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 14:16:14
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 14:58:10
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 15:00:43
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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 ?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 15:53:10
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 16:17:25
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
Membro desde: 08/06/2006 11:38:58
Mensagens: 432
Localização: Cascavel - PR
Offline
|
aaaaaaaaaaaaah bem observado, kkk ja estou testando
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 16:39:24
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 16:56:08
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/01/2012 17:20:58
|
cleiton herrmann
JavaEvangelist
![[Avatar]](/images/avatar/291dbc18539ba7e19b8abb7d85aa204e.jpg)
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
|
|
|
 |
|
|