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: deve verificar se um usuário é ele mesmo através de validação de senhas e/ou
certificados.
- 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", nu
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 </faces-config>.
<lifecycle>
<phase-listener>util.Autorizador</phase-listener>
</lifecycle>
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-criptografiamd5/29975#ixzz314wGJJn4
Spring Security. Disponível em: http://projects.spring.io/spring-security/
Download

JSF - Controle de Acesso