Estou tendo eu problema de como eu faço para tratar qdo uma sessão expirou com struts. Alguem tem uma ideia para me ajudar.
A principio eu criei um classe e estendi de ActionServlet, pq toda requesição que houver numa pagina passa primeiro nele, mas eu to conseguindo saber qdo é a primeira vez que o pessoa entra no site ou se é sessao expirou, pois eu tenho que mandar o pessoa caso a sessao expira para a tela de login com um msg na pagina.
Existem três formas, pelo menos que conheço para que uma sessão possa expirar:
1. Timeout, lembre-se que você pode configurá-lo previamente a partir do deployment descriptor.
2. Você pode chamar o médodo invalidate ou setMaxInactiveInterval, inclusive, esta última irá efetuar um override no que foi setado no DD;
3. Pode ocorrer um crash com a aplicação ou ela vir a ser retirada do contexto do container web/ejb (undeployed).
Bem, você pode buscar alternativas, mas a que acho mais interessante, seria em utilizar um Listerner para isto. Segue algumas boas referências para começar. [1] [2]
Têm este diagrama, que dá para ter uma idéia de uso quanto aos listerners de sessão, bem como de seu ciclo de vida, assim como os servlets possuem. Provavelmente você irá utilizar o HttpSessionListener.
Dependendo do caso você poderia até utilizar o Intercept Filter.
Mas caso alguém ache alguma forma mais interessante aqui, manda brasa para mantermos boas práticas.
Fallow!
A
alissonvla
Fala Rafael Cavalcanti, blz Cara!!!
Mas como eu iria utilizar esse httpSessionListener, com Struts. Pq o que eu to tentando fazer , pegar uma classe e estender a ActionServlet e sobescrevo o metodo process , nisso eu obrigo toda requisição da pagina passar por esse metodo , mas so que eu to conseguindo saber se a pessoa que entrou no site é pela primeira vez (um objeto qq sera null) ou se a sessao espirou (o objeto tbm sera null), ai eu sei qdo eu vou enviar a pessoa para a pagina principal e mandar uma msg avisando que ele nao possue sessao.
Vlw!!!
faelcavalcanti
Cara, me equivoquei quanto a citação:
faelcavalcanti:
Segue algumas boas referências para começar. [1] [2]
Não se esqueça de declará-lo no DD. Agora, caso você queira modificar a saída do usuário, ou seja, redirecionar para uma outra tela e modificar o comportamento você deverá utilizar o Intercept Filter, mas isto também poderá ser feito a partir do método process do ActionServlet como você falou que teria implementado a partir do struts. Bem, quanto ao último, acho que o método isNew() do HttpSession resolve ao invés de verificar se é nula.