Pessoal, tenho uma aplicação em JSF 2, usando primefaces 2.2.1 e jboss as 6 final.
O problema que acontece na minha aplicação é que, com excessão da tela de login, todas as telas após o login estão lançando a exception javax.faces.application.ViewExpiredException.
Basta dar um F5 e a exception é lançada.
Eu achei que o problema era apenas configurar um time-out no web.xml, então fui lá e como não tinha nenhuma configuração, adicionei o seguinte código:
<!-- TEMPO DE SESSÃO -->
<session-config>
<session-timeout>180</session-timeout>
</session-config>
Acontece que o problema NÃO foi resolvido e continua lançando a exception a toda hora!
Alguem tem alguma idéia de como me ajudar, de como posso resolver este problema?
OBSERVAÇÃO: Eu não estou procurando tratar o erro com uma tela de erro default quando lançar a exception, estou procurando uma solução para o problema de lançar a exception mesmo sem a sessão ter chegado ao fim!
Me desculpem a forma…mas a sessão do container deve ser o minimo possível!!!
Essa viewexceptoion tem outra natureza e deve ser contornado de outra forma…
Pelo amor de deus, não caia do erro de remediar algo com outro erro pior…1 hora para eliminar uma sessão em desuso no container é erro gravíssimo de escalabilidade
Antes de qualquer coisa entenda o que é essa situação - http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2
Fernando, eu li o seu artigo e o cara fez exatamente o que eu fiz: criou uma ViewExpired.xhtml mostrando uma mensagem para o usuário que a sessão dele expirou por questões de segurança.
Não vejo porque é um erro deixar 1 hora de sessão, pois na minha escalabilidade quando isso se tornar crítico eu reduzirei para 30 minutos. E assim por diante…
Mas enfim, nada disso tem a ver com o problema original que é “mostrar ViewExpiredException a todo instante” e não apenas após passar 5 ou 10 ou 60 minutos. Será que alguém pode me ajudar com isso?
ViewExpiredException acontece pq o toda as vezes que o navegador acessa a pagina, não existindo mais o ID da sessão corrente dentro do JSF…Ou seja…ou a sessão não existe mais no servidor ou o navegador não esta enviando o cookies identificador…eu aposto no navegador kkk…o IE9 gerou esse erro em aplicativos JSF ja documentados por mim…
Tente descobrir porque o navegador perde a sessão a cada request…(ja que a sessão ta 1 hora né kkk)
Um usuario entra…gasta HEAP no seu server por 2 minutos e vc espera por 1 hora para limpar isso???
Totalmente impraticável e uma baita brecha de segurança relacionado com todos os possíveis atackes de SESSION HIJACKING, Back do navegador dura por 1 hora tb depois que usuário abandona o PC sem deslogar…iiiiiiiiii só pipino meu… Veja outros problema aqui - http://fernandofranzini.wordpress.com/2010/12/16/plano-de-vulnerabilidades/
Eu desconheço qualquer aplicação profissional assim…
Agradeço as dicas e os conselhos, vou estudar a questão. Não estou mais no trabalho, mas na segunda-feira vou conferir os cookies do navegador…
Você parece entender bastante sobre Java, isso é legal. Mas algumas palavras que você usa podem ser mal interpretadas, como quando disse que desconhece aplicações profissionais assim. Bem, eu possuo diploma e certificação de pós-graduação, então eu poderia me sentir ofendido com a sua afirmação.
Mas quero acreditar que você quis dizer que desconhece aplicações “de mercado” assim. Nesse caso eu não me sentiria ofendido e até te explicaria que eu resolvi os problemas de segurança criando PhaseListeners que controlam a autenticação e autorização e Filters que limpam o cache do navegador. Na verdade, desenvolvi um módulo inteiro de segurança, pois o JAAS não atendeu algumas necessidades da minha empresa.
Trabalho com Java há apenas 1 ano, então ainda estou aprendendo as boas práticas de mercado. Vou dar uma olhada nos textos que você recomendou.
Meu objetivo aqui é compartilhar, ajudar e aprender…Jamais meu objetivo foi ofender alguem…desculpe, mas na sexta estava na correria e não tive tempo de escrever mais detalhadamente…
Aqui no fórum cada deve receber as dicas e tomar seu própria decisão o que vc achar que deve…
No resto, se quiser continuar a questão estou aqui…
Estou fazendo mais testes e até o momento descobri que o problema acontece quando o menu da minha aplicação fica com mais de 13 itens. Isso me deixa com a sensação de que o problema pode ser falta de memória… apesar de a mensagem de erro ser sessão expirada.
Era um BUG do Primefaces… ao adicionar 14 itens ao menu com ícones de figuras que não existem, ele lança uma ViewExpiredException ao invés de exibir alguma outra mensagem correta que seria a falta do arquivo com a figura do ícone.
Eu estava construindo o menu sem as figuras existirem, pois estou fazendo uma aplicação que envolve mais de 90 tabelas… então eu ía fazer as figuras depois. O que realmente me confundiu foi que funcionava com até 13 itens…
Era um BUG do Primefaces… ao adicionar 14 itens ao menu com ícones de figuras que não existem, ele lança uma ViewExpiredException ao invés de exibir alguma outra mensagem correta que seria a falta do arquivo com a figura do ícone.
Eu estava construindo o menu sem as figuras existirem, pois estou fazendo uma aplicação que envolve mais de 90 tabelas… então eu ía fazer as figuras depois. O que realmente me confundiu foi que funcionava com até 13 itens…