foi bem do seu blog que eu aprendi como utilizar PhaseListener!!!
Mas seguindo os passos que você postou, no qual funcionam perfeitamente, eu descobri que o método getViewId() pega a página atual da requisição, ou seja, “home.jsp”, para entrar em uma página de cadastro que seria “cadastro.jsp”, minha dúvida é: Como saber que a página na qual meu cliente está requisitando através de “home.jsp” é “cadastro.jsp” ? Pois o PhaseListener vai buscar em seu perfil se esse cliente tem acesso ou não, como eu faria isso?? Eu ia mandar essa pergunta em seu blog mas como te encontrei aqui no guj ficou ainda mais fácil!!
No método afterPhase(PhaseEvent pe) no pe.getPhaseId(), quando o phaseId for APPLY_REQUEST_VALUES (2) ele informa a pagina de origem e mantém até executar o UPDATE_MODEL_VALUES (4)
A proxima fase INVOKE_APPLICATION (6) do afterPhae(PhaseEvent pe) ele já retorna o destino (próxima página).
A txans é que nesta fase no beforPhase(PhaseEvent pe) se vc pegar pe.getPhaseId() == INVOKE_APPLICATION vc pegará quem está chamando (pelo menos no meu teste).
Se vc for utilizar somente o afterPhase, capture a origem no APPLY_REQUEST_VALUES e o destino no RENDER_RESPONSE.
Mas implementei o berforePhase mesmo e mudei o retorno do método PhaseID para PhaseID.RENDER_RESPONSE, assim o metódo vai pegar a página de resposta do meu ManagedBean e não a de requisição.
A muito venho tentando criar em meu aplicativo web, um esquema de autorização e autenticação, mas não estou conseguindo por ser iniciante em Java.
Já tentei LDAP com servidor OpenDS, já tentei JAAS e não obtive êxito.
Eu li sobre o PhaseListener (utilizando filtros), parece que isso seria a solução pra mim.
Eu trabalho com Glassfish + Netbeans + ICEFaces.
Entrei na página do [url]http://www.rodrigolazoti.com.br/?p=56 [/url] para ver o exemplo, mas não tem a página de Login e o Bean onde é colocado o usuário logado em sessão. Não sei como fazer isso.
Você poderia me ensinar como fazer um esquema desses a partir da criação de uma página de Login ?
Eu criei uma classe (utilizando filtro) para autenticar usuários no meu sistema. A lógica funcionou, só que tem um problema pra resolver. No meu sistema, existirá usuários que terão permissão para acessar diversas páginas e outros não.
Algum colega poderia me ensinar a criar ROLES para autorização de usuários a determinadas páginas utilizando o mesmo esquema de filtro que desenvolvi ???
Meu amigo, eu vi o seu exemplo e é mto bom, mas estou com um problema na implementação do meu código:
Ele está filtrando direitinho as requisiçoes, mas a partir do momento que o usuário loga no sistema e acessa a pagina principal, eu nao consigo mais acessar nenhuma página dentro dela. Quando eu vou clicar em outra jsp ou tento acessa/gravar no banco, ele me redireciona para a pagina de login.
O que pode ser isso??
Agradeço a atençao.
Minha authorizationListener:
O problema de vocês deve estar na lógica de login, vocês devem estar verificando os dados informados no login mas redirecionando para o menu eles estando corretos ou não. Então como o phaseListner valida todas as requisições, ao tentarem fazer uma nova requisição vocês não passam na validação e são redirecionados para o login.
Acho que depois de 3 anos com o problemas resolvido, vocês poderiam me ajudar… rs
Eu estou migrando minha aplicação e um dos pontos é mudar do Struts 1.3 para o JSF… estou trabalhando três dias para entender o JSF e começar a migrar pelo inicio… LOGIN… eu acho que entendi como o funciona o PhaseListener… o login já está funcionando, coloco o user na sessão, recupero, vejo se está tudo ok e redireciono para a próxima pagina… o problema é quando vou sair da sessão e voltar para a index.jsp ? ele funciona e volta, mas perde as configurações do css… e eu sei que é algum problema no PhaseListener porque isso só acontece quando eu configuro ele no meu faces-config
Alguém poderia me dar alguma luz?
Preciso implementar controle de acessos usando Phaselistener para impedir o usuário de logar 2 vezes no sistema seja através de outra aba, browser ou pc, alguem tem algum exemplo? É possível fazer isto usando phaselistener?