Eu utilizo segurança declarativa em aplicação web e estou com o seguinte problema: se eu abrir uma tela que tem um botão de pop-up e esperar a sessão expirar vai abrir a tela de login no popup. Pensei em resolver com um servlet ou action que checaria se o login ainda está ativo, caso contrário fecharia a tela e abriria a página de login. Alguém já fez isso? Sabe se funciona? Tem sugestão melhor?
Popup + segurança declarativa
8 Respostas
Salve,
bem para você checar se o usuário ainda está ativo utilize a expressão:
request.getUserPrincipal() == null
bem eu não sei seu eu entendi, o que você quer é que quando passar o tempo da sessão redirecionar para a página de login?? é isto?
bem eu não sei seu eu entendi, o que você quer é que quando passar o tempo da sessão redirecionar para a página de login?? é isto?
Mais ou menos. Ele já redireciona normalmente. O que eu quero é evitar que a página de login abra em um pop-up. Por isso pensei em usar um redirecionador para interceptar a chamada aos pop-ups.
Me pergunto agora se usar um filtro seria uma boa alternativa…
Bem,
porque você não usa páginas customizadas de login???
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-error-page>/jsp/LoginInvalido.jsp</form-error-page>
<form-login-page>/jsp/Login.jsp</form-login-page>
</form-login-config>
</login-config>
-> código para página de login.
<form name="form" method="post" action="j_security_check"
onsubmit='return validCpm([j_username, j_password ],[ "nome", "senha" ])'>
E-mail:<input name="j_username" type="text" class="botao" id="j_username" size="40">
<br>
Senha: <input name="j_password" type="password" class="botao" id="j_password" size="15" maxlength="8">
<input name="cadastrar" type="submit" class="botao" id="cadastrar" value="Entrar">
… bem não sei se é isso que você está realmente querendo.
:okok:
Não… Veja bem, eu já tenho uma página de login que funciona normalmente.
O problema ocorre quando estou em em uma página que tem um botão que abre pop-up. Se a sessão expirar e eu clicar no botão, ele vai abrir o pop-up e tentar acessar a página. Como a sessão expirou ele vai abrir a página de login só que dentro do pop-up, o que é feio pra caramba.
O que eu quero é evitar que o pop-up abra se a sessão expirar. Ele deve mostrar a página de login, mas não no pop-up.
hummm… bem agora sim eu entendi… se for apenas uma página você pode por algo do tipo:
<c:if test='${empty userPrincipal}>
//crie uma tag de script
window.close();
</c:if>
bem é um pouco tosco mas resolve.
Obs.: você terá que importar a biblioteca core das JSTL ok?!
:okok:
Isso não funcio porque ele não chega nem a enviar a requisição ao servidor web. A segurança roda antes disso. Tentei inclusive utilizar um filtro para interceptar a requisição antes de chegar na página mas ainda assim a segurança não me deixou chegar no filtro.
Resolvi o problema liberando o acesso aos pop-ups. Obviamente essa abordagem não funcionaria em casos onde os pop-ups contivessem informações/funcionalidades críticas. Como não é o caso deixarei assim.
Salve,
Caraca… nem tinha pensado nisto… bem porque você não passa para uma página tosca que não seja de acesso restrito, aí nela você testa de a sessão está ativa se tiver você passa para a página restrita, caso contrário manda uma mensagem para o usuário.
Tentei fazer um filtro aqui mas dá o mesmo problema!
:okok:
Essa sua abordagem realmente é mais interessante. Vou tentar algo desse tipo depois mas como o projeto está pra ser entregue não posso voltar pra modificar isso em todos os pop-ups.
.Java