Mostrar Popup apos sessão expirada

361 views
Skip to first unread message

juhnao Rodrigues

unread,
Mar 31, 2010, 12:40:43 PM3/31/10
to jav...@googlegroups.com
Pessoal,

Estou com uma aplicação que tem 20 minutos para expirar a sessão,
gostaria que quando esse tempo terminasse
exibisse um popup de sessão expirada, e após o clique de confirmação
redirecionar para pagina de login.
Possuo applets nessa aplicação que acessam o servidor utilizando
WebServices, e portanto, o tempo da sessão também é influenciado pelas
requisições do applet e não apenas da página. Isso impossibilita que
eu utilize uma função java script que conte o tempo da sessão.

dei uma olhada no forum e até vi uma maneira mas no springframework a
versao é diferente e nao possui o pacote
que na versão passada existia...
o pacote seria esse "ui" do
org.springframework.security.ui.ExceptionTranslationFilter
o spring frame work que utilizo é da versão 3.0.0 e a que tem esse
pacote é 2.0.5

utilizo tanto JSF como spring...

agradeço desde já...


att.
Fábio Jr.

Bruno Maomeh

unread,
Mar 31, 2010, 12:51:52 PM3/31/10
to jav...@googlegroups.com
um filter, serviria pra vc não?


--
http://groups.google.com/group/javasf

You received this message because you are subscribed to the Google
Groups "javasf: JavaServer Faces Group" group.
To post to this group, send email to jav...@googlegroups.com



--
Bruno Maomeh
  http://brunomaomeh.wordpress.com

Glauco P. Gomes

unread,
Mar 31, 2010, 1:05:42 PM3/31/10
to jav...@googlegroups.com
Se o problema for com o Spring Security, ai vai o javadoc da classe no
SS 3.0.2:

http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/web/access/ExceptionTranslationFilter.html

Glauco P. Gomes

juhnao Rodrigues escreveu:
> Pessoal,
>
> Estou com uma aplica��o que tem 20 minutos para expirar a sess�o,


> gostaria que quando esse tempo terminasse

> exibisse um popup de sess�o expirada, e ap�s o clique de confirma��o


> redirecionar para pagina de login.

> Possuo applets nessa aplica��o que acessam o servidor utilizando
> WebServices, e portanto, o tempo da sess�o tamb�m � influenciado pelas
> requisi��es do applet e n�o apenas da p�gina. Isso impossibilita que
> eu utilize uma fun��o java script que conte o tempo da sess�o.
>
> dei uma olhada no forum e at� vi uma maneira mas no springframework a
> versao � diferente e nao possui o pacote
> que na vers�o passada existia...


> o pacote seria esse "ui" do
> org.springframework.security.ui.ExceptionTranslationFilter

> o spring frame work que utilizo � da vers�o 3.0.0 e a que tem esse
> pacote � 2.0.5


>
> utilizo tanto JSF como spring...
>

> agrade�o desde j�...
>
>
> att.
> F�bio Jr.
>
>


juhnao Rodrigues

unread,
Apr 1, 2010, 11:48:46 AM4/1/10
to jav...@googlegroups.com
Como seria esse filter? teria alguma exemplo?

agradeço desde já..

Loreno Oliveira

unread,
Apr 4, 2010, 4:09:15 PM4/4/10
to jav...@googlegroups.com
Opa, sou novo no grupo, e de certa forma também em JSF.Mesmo assim vou tentar dar meus 5 centavos para qq discussão que eu ache que possa participar :-)

Bom, tem que ser um popup mesmo? Estava com um requisito bem parecido com o seu. Eu simplesmente queria pegar o evento de expiracao da sessao e mostrar uma mensagem para o usuario.

No caso fiz isso declarando um redirecionamento no web.xml para ViewExpiredException. Na página do redirecionamento eu exibia uma mensagem informando o que tinha acontecido e com um novo redirecionamento automatico em 15s para a tela de login.

Creio que a ViewExpired pode ser provocada por outras razoes alem do timeout da sessao. Acho que outro caso eh o caso do usuario "brincar" com o botao voltar do browser. Nesse caso coloquei uma mensagem mais genérica, descrvendo as possiveis causas da perda da sessao corrente.

Enfim, para mim esta bom assim, nao sei se te ajuda. Alem disso, se alguem quiser criticar minha solucao fico muito agradecido :-)

Abraços,

Loreno

To unsubscribe, reply using "remove me" as the subject.

juhnao Rodrigues

unread,
Apr 8, 2010, 1:13:20 PM4/8/10
to jav...@googlegroups.com
Loreno Oliveira,

muito obrigado por sua postagem, mas nao consegui fazer esse
redirecionamento para outra pagina, e também como seta esse tempo de
15s para tela de login?

eu ate pesquisei um pouco mais sobre a ViewExpiredException

achei códigos assim:

<context-param>
<param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
<param-value>com.sun.facelets.FaceletViewHandler</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
<param-value>true</param-value>
</context-param>

e isso...

<exception class="javax.faces.application.ViewExpiredException">
<redirect view-id="your-login.xhtml">
<message>View expired, login again!</message>
</redirect>
</exception>

seria algo +ou- assim que voce fez no seu requesito?

se foi, poderia me explicar como é a funcionalidade desse código?

grato!

att.
Fábio Jr.

Em 4 de abril de 2010 17:09, Loreno Oliveira
<lorenoo...@gmail.com> escreveu:

Loreno Oliveira

unread,
Apr 8, 2010, 2:31:18 PM4/8/10
to jav...@googlegroups.com
Opa Fábio, a solução é bem simples, eu devia ter colado o código lodo de cara. De qq forma, ai vai...

web.xml (simplificado)

  <error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/pages/sessionExpired.xhtml</location>
  </error-page>

sessionExpired.xhtml (simplificado)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="pt-BR" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Refresh" content= "15; URL=#{facesContext.externalContext.requestContextPath}/pages/login.xhtml"/>
<!-- restante do meu head -->
</head>

<body>
<div id="conteudoLogin">
<div class="divMensagensErro">
<ul class="mensagensErro">
<li>Sessão expirada.</li>
</ul>
</div>
<div class="explicacaoErro">
<p>Sua sessão na aplicação expirou e um novo login precisa ser feito. Sua sessão pode ter expirado por duas razôes:</p>
<p>1. Você passou mais do que 20 minutos sem interagir com a aplicação;</p>
<p>2. Você utilizou algumas vezes o botão "voltar" do seu browser.</p>
<p>Você será automaticamente redirecionado para um novo login em 15 segundos ou, se preferir, clique <a href="#{facesContext.externalContext.requestContextPath}/pages/login.xhtml">aqui</a> para ser redirecionado agora.</p>
</div>
</div>
</body>
</html>

Como essa eh uma exceção de certa forma esperada, eu nao preciso fazer nenhum tratamento especial quando ela acontece. Outras exceções, entretanto, eu fiz um arranjo diferente, onde eu capturo o stacktrace, redireciono o usuario para uma tela com um formulario para ele explicar oq estava fazendo no nomento do problema, e então enviar um mail para mim com isso tudo. Em próximas versões vou tentar melhorar esse relatório para me dar mais informações sobre o momento da falha...

Loreno
Reply all
Reply to author
Forward
0 new messages