jsf - controle de acessoblog.unifimes.edu.br/.../sites/2/2014/05/jsf-controle-de-acesso.pdf · jsf...

12
JSF - Controle de Acesso FERNANDO FREITAS COSTA ESPECIALISTA EM GESTÃO E DOCÊNCIA UNIVERSITÁRIA

Upload: danglien

Post on 10-Nov-2018

231 views

Category:

Documents


0 download

TRANSCRIPT

JSF - Controle de AcessoFERNANDO FREITAS COSTA

ESPECIALISTA EM GESTÃO E DOCÊNCIA UNIVERSITÁRIA

JSF – Controle de AcessoAntes 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 AcessoAo 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

FiltersEsta é 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, estaspodem se utilizar de um recurso especifico do JSF chamado da phase listener que é responsávelpor interceptar e oferecer mecanismos de manipulações referentes as mudanças de eventosocorridas no ciclo de vida da especificação. Relacionado ao contexto de autenticação eautorizaçã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).”

jGuardjGuard é 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 SecuritySpring 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 ShiroApache 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 ListenerCrie uma nova classe dentro do pacote utilchamada Autorizador e faça as importações necessárias.

import bean.LoginBean;public class Autorizador implements PhaseListener {

@Overridepublic 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", nullfacesContext.addMessage("", message);NavigationHandler nh = facesContext.getApplication().getNavigationHandler();nh.handleNavigation(facesContext, null, "/index.xhtml");

}}@Overridepublic void beforePhase(PhaseEvent arg0) { }@Overridepublic PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW;}

}

Utilizando o Phase ListenerAltere 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ênciasFRANZINI, 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/