Transcript JSF - Controle de Acesso
JSF - Controle de Acesso
FERNANDO FREITAS COSTA ESPECIALISTA EM GESTÃO E DOCÊNCIA UNIVERSITÁRIA
JSF – Controle de Acesso
Antes de iniciarmos este assunto, é importante conhecermos a definição de autenticação e autorização.
- Autenticação:
certificados.
deve verificar se um usuário é ele mesmo através de validação de senhas e/ou
- Autorização:
com base em um usuário identificado, as regras e controles de permissão e acesso serão aplicadas na aplicação/produto e seus recursos.
JSF – Controle de Acesso
Ao desenvolvermos uma apliação em java para web, existem várias maneiras de fazer com que o acesso a determinadas páginas só possa ser autorizado mediante um processo de login com sucesso. Entre elas estão: - Servlet Filter - Phase Listener - Java Authentication and Authorization Service (JAAS) - jGuard - Spring Security - Apache Shiro
Filters
Esta é a forma mais básica e rápida de implementar uma solução deste tipo. O Filter permite a interceptação, manipulação e redirecionamento de todas as requisições HTTP do seu servidor, filtrando o endereço que está sendo acessado. Sendo assim, quando o usuário João acessar aquela URL que é proibida, você pode imediatamente redirecioná-lo para outro endereço, antes que a resposta seja dada ao cliente.
Phase Listener
“
Para as aplicações escritas em JavaServer Faces , além da opção de usar servlets filters, estas podem se utilizar de um recurso especifico do JSF chamado da phase listener que é responsável por interceptar e oferecer mecanismos de manipulações referentes as mudanças de eventos ocorridas no ciclo de vida da especificação. Relacionado ao contexto de autenticação e autorização, ela se encaixa perfeitamente para a implementações de controle de usuários, oferendo ao projetista da aplicação mais uma opção arquitetural.
” (Fernando Franzini)
Java Authentication and Authorization Service
“O JAAS (Java Authentication and Authorization Service) é a API padrão do Java para controle de acesso e autorização em aplicações JavaEE. Com JAAS é possível autenticar e validar usuários e certificados, bem como controlar a possibilidade de acesso e/ou utilização de recursos na aplicação (arquivos, diretórios, URLs, conteúdo, etc).”
jGuard
jGuard é uma biblioteca que fornece segurança EASY (autenticação e autorização) para aplicações web em Java. Ele é construído sobre a estrutura estável e madura JAAS, que faz parte da API Java J2SE. jGuard é muito flexível e permite várias maneiras diferentes para configurar esses mecanismos de autenticação e autorização, ou seja, em um banco de dados relacional, arquivos XML ou serviço LDAP. jGuard está sob a licença LGPL open source.
Spring Security
Spring Security é uma estrutura que se concentra em fornecer autenticação e autorização para aplicações Java. Como todos os projetos Spring, o poder real do Spring Security é encontrado em quão facilmente ele pode ser estendido para atender aos requisitos personalizados.
Características: - Suporte abrangente e extensível para autenticação e autorização - Proteção contra ataques, como fixação de sessão, clickjacking, cross site request forgery, etc - Integração API Servlet - Integração opcional com Spring Web MVC - Muito mais ...
Apache Shiro
Apache Shiro é um framework poderoso e fácil de usar que executa autenticação, autorização, criptografia e gerenciamento de sessão. Com a API fácil de entender do Shiro, você pode rapidamente e facilmente proteger qualquer aplicação - desde as menores aplicações móveis até as maiores aplicações web e corporativas.
Utilizando o Phase Listener
Crie uma nova classe dentro do pacote
util
chamada
Autorizador
e faça as importações necessárias.
} import bean.LoginBean; public class Autorizador implements PhaseListener { @Override public void afterPhase(PhaseEvent event) { FacesContext facesContext = event.getFacesContext(); String currentPage = facesContext.getViewRoot().getViewId(); boolean isLoginPage = (currentPage.lastIndexOf("index.xhtml") > -1); HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true); LoginBean loginBean = (LoginBean) session.getAttribute("loginBean"); if (!isLoginPage && loginBean != null && !loginBean.isAutenticado()){ FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Acesso negado", null facesContext.addMessage("", message); NavigationHandler nh = facesContext.getApplication().getNavigationHandler(); nh.handleNavigation(facesContext, null, "/index.xhtml"); } } @Override public void beforePhase(PhaseEvent arg0) { } @Override public PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW;}
Utilizando o Phase Listener
Altere seu arquivo faces-config.xml e adicione as linhas a seguir antes da tag .
Referências
FRANZINI, Fernando.
Autenticação e Autorização.
Disponível em: http://fernandofranzini.wordpress.com/2009/09/09/autenticacao-e-autorizacao/ JEVEAUX, Paulo César M.
Autenticação e Autorização: JAAS com JDBC Realm
. Disponível em: http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/
jGuard
. Disponível em: http://jguard.xwiki.com/xwiki/bin/view/Main/WebHome LANHELLAS, Ronaldo.
JSF Filter: Criando um sistema de login com criptografia MD5.
Disponível em: http://www.devmedia.com.br/jsf-filter-criando-um-sistema-de-login-com-criptografia md5/29975#ixzz314wGJJn4
Spring Security
. Disponível em: http://projects.spring.io/spring-security/