Você está na página 1de 12

JSF - Controle de Acesso

FERNANDO FREITAS COSTA


ESPECI ALI STA EM GESTO E DOCNCI A UNI VERSI TRI A
JSF Controle de Acesso
Antes de iniciarmos este assunto, importante conhecermos a definio de autenticao e
autorizao.
- Autenticao: deve verificar se um usurio ele mesmo atravs de validao de senhas e/ou
certificados.
- Autorizao: com base em um usurio identificado, as regras e controles de permisso e
acesso sero aplicadas na aplicao/produto e seus recursos.
JSF Controle de Acesso
Ao desenvolvermos uma apliao em java para web, existem vrias maneiras de fazer com que o
acesso a determinadas pginas s possa ser autorizado mediante um processo de login com
sucesso. Entre elas esto:
- Servlet Filter
- Phase Listener
- Java Authentication and Authorization Service (JAAS)
- jGuard
- Spring Security
- Apache Shiro
Filters
Esta a forma mais bsica e rpida de implementar uma soluo deste tipo. O Filter permite a
interceptao, manipulao e redirecionamento de todas as requisies HTTP do seu servidor,
filtrando o endereo que est sendo acessado. Sendo assim, quando o usurio Joo acessar
aquela URL que proibida, voc pode imediatamente redirecion-lo para outro endereo, antes
que a resposta seja dada ao cliente.
Phase Listener
Para as aplicaes escritas em JavaServer Faces, alm da opo de usar servlets filters, estas
podem se utilizar de um recurso especifico do JSF chamado da phase listener que responsvel
por interceptar e oferecer mecanismos de manipulaes referentes as mudanas de eventos
ocorridas no ciclo de vida da especificao. Relacionado ao contexto de autenticao e
autorizao, ela se encaixa perfeitamente para a implementaes de controle de usurios,
oferendo ao projetista da aplicao mais uma opo arquitetural.
(Fernando Franzini)
JavaAuthenticationandAuthorizationService
O JAAS (Java Authentication and Authorization Service) a API padro do Java para controle de
acesso e autorizao em aplicaes JavaEE. Com JAAS possvel autenticar e validar usurios e
certificados, bem como controlar a possibilidade de acesso e/ou utilizao de recursos na
aplicao (arquivos, diretrios, URLs, contedo, etc).
jGuard
jGuard uma biblioteca que fornece segurana EASY (autenticao e autorizao) para
aplicaes web em Java.
Ele construdo sobre a estrutura estvel e madura JAAS, que faz parte da API Java J2SE.
jGuard muito flexvel e permite vrias maneiras diferentes para configurar esses mecanismos
de autenticao e autorizao, ou seja, em um banco de dados relacional, arquivos XML ou
servio LDAP.
jGuard est sob a licena LGPL open source.
Spring Security
Spring Security uma estrutura que se concentra em fornecer autenticao e autorizao para
aplicaes Java. Como todos os projetos Spring, o poder real do Spring Security encontrado em
quo facilmente ele pode ser estendido para atender aos requisitos personalizados.
Caractersticas:
- Suporte abrangente e extensvel para autenticao e autorizao
- Proteo contra ataques, como fixao de sesso, clickjacking, cross site request forgery, etc
- Integrao API Servlet
- Integrao opcional com Spring Web MVC
- Muito mais ...
Apache Shiro
Apache Shiro um framework poderoso e fcil de usar que executa autenticao, autorizao,
criptografia e gerenciamento de sesso. Com a API fcil de entender do Shiro, voc pode
rapidamente e facilmente proteger qualquer aplicao - desde as menores aplicaes mveis
at as maiores aplicaes web e corporativas.
Utilizando o Phase Listener
Crie uma nova classe
dentro do pacote util
chamada Autorizador e
faa as importaes
necessrias.
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 </faces-config>.
<lifecycle>
<phase-listener>util.Autorizador</phase-listener>
</lifecycle>
Referncias
FRANZINI, Fernando. Autenticao e Autorizao. Disponvel em:
http://fernandofranzini.wordpress.com/2009/09/09/autenticacao-e-autorizacao/
JEVEAUX, Paulo Csar M. Autenticao e Autorizao: JAAS com JDBC Realm. Disponvel em:
http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/
jGuard. Disponvel em: http://jguard.xwiki.com/xwiki/bin/view/Main/WebHome
LANHELLAS, Ronaldo. JSF Filter: Criando um sistema de login com criptografia MD5. Disponvel
em: http://www.devmedia.com.br/jsf-filter-criando-um-sistema-de-login-com-criptografia-
md5/29975#ixzz314wGJJn4
Spring Security. Disponvel em: http://projects.spring.io/spring-security/