Problema com autenticação e url no JSF

3 respostas
V

olá galera…
estou enfrentando um pequeno problema em uma aplicação em que estou envolvido.
nossa equipe utiliza Spring para autenticar usuários e permitir ou não a visualização de uma página do sistema.

o usuário possui uma lista de url’s que ele pode acessar e, a cada requisição de página, é verificado se o mesmo possui ou não permissão para visualizar a mesma.
acontece que, como muita gente sabe, existe o tal do redirect e forward no JSF. não estamos usando redirect, para evitar uns problemas que ele acarreta, e a nossa URL fica atrasada.

se a URL fica atrasada, logo nossa autenticação não irá funcionar corretamente.

exemplificando o que acontece, suponha que tenho acesso à “menu.jsf” e não tenho acesso à “cadastro.jsf”:

estou em “menu.jsf” e vou para “cadastro.jsf”. eu não poderia ter acesso à página cadastro, mas como vai passar a url atrasada(menu.jsf), consigo acessar. quando estou saindo de “cadastro.jsf” e indo para “menu.jsf”, recebo acesso negado por estar testando meu acesso com a url atrasada “cadastro.jsf”

gostaria de saber se posso e como posso recuperar a url da página que está me mostrando mesmo, para poder utilizar ela para o teste de autenticação…

obs:já li o post do Rafael Ponte sobre redirect e forward.

3 Respostas

ekszuki

Boa tarde,

acredito que vc possa resolver seu problema utilizando PhaseListener.

Tem um tutorial bem legal nesse endereço:
http://www.rodrigolazoti.com.br/pt/2008/09/01/filtrando-usuarios-logados-em-jsf-com-phaselistener

Att,

gilmaslima

Esse problema de Url atrasada dá pra resolver com o JBoss Seam, dá uma procurada aqui no fórum que tem alguns tópicos falando sobre isso, mas com o Phaselistener já dá pra resolver seus problemas de permissão de acesso.

flw!

V

seguinte…dei uma olhada no PhaseListener…

quem faz a decisão de autenticação em nossa aplicação é o AccessDecisionManager do Spring.

implementei um PhaseListener só pra ver a url que tava passando em cada fase do lifecycle. a tomada de decisão do Spring é chamada antes do PhaseListener, ainda com a url anterior.
no PhaseListener a url fica atrasada até a fase INVOKE_APPLICATION. como o Spring foi chamado antes para decidir se o usuário pode ou não pode acessar a página, a minha decisão já era.

quanto ao JBoss Seam, ouvi falar muito bem dele…mas a galera que trabalha comigo não quer trocar, por questão de tempo(a aplicação precisa estar rodando meio logo e o tempo até aprender como funciona o JBoss e seus possíveis problemas talvez coloque em risco o tempo de entrega do projeto).

agradeço a ajuda anterior dos colegas que responderam o tópico, e se tiverem outra alternativa, ficarei muito grato

att

Criado 1 de março de 2011
Ultima resposta 2 de mar. de 2011
Respostas 3
Participantes 3