Autenticação e autorização JSF

Qual é a melhor maneira de implementar autenticação e autorização para um aplicativo da Web JSF? De preferência, eu ainda quero usar a segurança baseada em contêiner, já que preciso chamar EJBs que exigem o principal.

Eu percebo que a autenticação baseada em formulário é uma grande dificuldade com o JSF, mas posso usar um PhaseListener ou algo semelhante junto com o logon programático para autenticar o usuário?

Quaisquer outros methods que eu deveria dar uma olhada?

Tente verificar o blog para usar o JAAS com o JSF. Este é o exemplo de como implementar o JAAS com o JSF para autenticação e autorização.

Espero que ajude.

Tigre

Você pode usar o framework Spring Security, veja as instruções aqui http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/

Eu uso o JSF Seam e usei a autenticação e autorização do Seam e o achei extremamente fácil de usar.

Para autenticação, você simplesmente implementa 1 método, public boolean login(String username, a String password) { ... } e retorna booleano. Em seguida, você pode marcar as páginas como “requerido para login” e a emenda cuida do resto.

Para autorização, o Seam lhe dá uma anotação @Restrict que você pode colocar em seu controlador ou methods de serviço e, novamente, o Seam cuida do resto.

Autorização avançada: Você também pode manipular autorizações mais avançadas com o Seam, onde as funções são dinâmicas – por exemplo, em um quadro de avisos você é “autor” de algumas postagens, mas de “leitor” ou outras postagens, simplesmente delegando sua anotação @Restrict a um método Java .

Eu encorajaria você a dar uma olhada no Seam. O Seam é apenas uma camada sobre o JSF, então tecnicamente você ainda estaria rodando no JSF. Se por algum motivo você não puder usar o Seam, talvez você possa emprestar algumas idéias de como o Seam lida com Autorização e Autenticação no JSF.

Você pode usar a API HttpServletRequest do Servlet 3.0, conforme mostrado nesta resposta para uma pergunta do JSF 2.0:

Página de login simples do JSF 2.0