Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que se trata o artigo:

O artigo ensina como realizar a integração do framework Spring Security com JSF e JPA para o desenvolvimento de aplicações seguras. Além disso, veremos um exemplo prático e realista de uma aplicação segura.


Em que situação o tema é útil:

Este artigo é útil para desenvolvedores, arquitetos ou gerentes que estejam utilizando JSF em seus projetos e desejam aplicar políticas de segurança na aplicação.

Resumo DevMan:

O Spring Security é uma alternativa à segurança oferecida pela especificação Java EE. O framework centraliza as configurações em um único XML, dispensando configurações do container, tornando a aplicação web portável. Assim, todo o controle passa a ser feito de maneira declarativa, e na prática isso significa retirar do desenvolvedor a responsabilidade de ter que controlar o acesso a recursos por perfis de maneira programática, utilizando filtros, por exemplo.

Aplicativos web são formados por diversos recursos, como páginas dinâmicas, estáticas, imagens, downloads, uploads, formulários, relatórios, etc. Na maioria delas existe a necessidade de controlar o acesso dos usuários a estes recursos, restringindo-o somente para aqueles previamente identificados e autenticados. Portanto, toda aplicação, em especial as aplicações web, deve apresentar maneiras de alocar ou retirar permissões de seus usuários, através de mecanismos de controle de acesso como autenticação e autorização.

O Spring Security 3 é um framework que tem como objetivo auxiliar na autenticação e autorização dos usuários das aplicações. É uma ferramenta simples de ser utilizada, porém, na integração com JSF 2, é necessário alguns cuidados que serão apresentados neste artigo. O framework surgiu da necessidade de uma biblioteca de segurança Java robusta e adaptável a diversos tipos de situações. Apesar de existirem ferramentas como o Java Authentication and Authorization Service (JAAS) e o Java EE Security, a tecnologia da Spring Source é uma opção diferenciada que provê um conjunto de funcionalidades de fácil uso, além de fornecer apoio para integração com vários outros sistemas de autenticação que podem já existir na empresa ou ser de sua necessidade.

Neste contexto, o objetivo desse artigo será, a partir de uma abordagem prática, apresentar o funcionamento do Spring Security, bem como mostrar a integração com JSF e JPA. Ao final, o leitor estará apto a construir aplicações web seguras utilizando essas tecnologias.

Autenticação X Autorização

Antes de entender como a segurança do Spring funciona, é fundamental conhecer dois conceitos: autenticação e autorização. Esses conceitos já foram amplamente discutidos nas edições 87 e 88 da revista, portanto caso o leitor já esteja familiarizado com eles, poderá simplesmente passar para o próximo tópico. No entanto, apresentamos abaixo não apenas os conceitos, mas também a relação deles com o framework Spring Security.

Autenticação

A autenticação é a verificação das credenciais (nome de usuário e senha) da tentativa de conexão. Esse processo consiste no envio de credenciais do cliente para o servidor em um formulário de texto simples ou criptografado usando um protocolo de autenticação.

Como veremos mais adiante, o Spring Security possui várias formas de realizar a autenticação. Podemos utilizar, por exemplo, o formulário de login que é gerado automaticamente pelo framework ou construir o nosso próprio formulário personalizado. Os usuários da aplicação que serão autenticados podem ser definidos diretamente no arquivo XML de configurações do framework ou em um banco de dados, como veremos neste artigo.

Autorização

Autorização é utilizada para verificar se determinado usuário previamente autenticado possui permissão para usar, manipular ou executar o recurso em questão. É a concessão de uso para determinados tipos de serviço, dada a um usuário previamente autenticado.

O Spring Security possui uma abordagem declarativa para a segurança, baseada em roles (papéis). Por exemplo, uma aplicação de uma pousada poderia ter dois roles: um ADMIN, que possui permissão para cadastrar acomodações e reservá-las, e um COMUM, que possui permissão apenas para reservá-las. Dessa forma os usuários que forem utilizar essa aplicação teriam que possuir algum desses roles.

Criando uma aplicação segura com Spring Security 3, JSF 2 (PrimeFaces) e JPA 2

Para demonstrar o funcionamento do Spring Security, bem como a integração com o JSF e JPA, vamos criar uma aplicação web simples. Para esse exemplo foi utilizado a IDE Eclipse Indigo, banco de dados MySQL 5 e Tomcat 7 como servidor de aplicação. Sendo que o leitor poderá utilizar outro banco de dados, IDE ou servidor de aplicação de sua preferência.

Construindo as tabelas

O primeiro passo deve ser a criação das tabelas necessárias para autenticação e autorização no banco de dados, bem como a inserção de alguns dados para teste.

Para criar estas tabelas no seu banco de dados MySQL, execute através de um script o código presente na Listagem 1. Este código, além de criar o schema e gerar as tabelas, insere três usuários para que seja possível realizarmos testes posteriormente.

O controle de acesso do framework é baseado em roles. Os roles ou papéis, em português, nos ajudam a gerenciar as autorizações que um determinado usuário tem dentro de uma aplicação. Esses roles nos permitem customizar o acesso a recursos da aplicação ou até mesmo da página. Para nosso exemplo, utilizamos três tabelas para efetuar o controle de acesso da nossa aplicação, são elas: user, role e user_role. A tabela user é responsável por guardar o login (username) e senha (password) do usuário. A tabela role guarda os papéis (roles) do sistema. E por fim a tabela user_role associa cada usuário do sistema a seu respectivo papel. Vale ressaltar que cada usuário pode estar associado a um ou mais roles, dando assim uma maior flexibilidade.

Imagine a seguinte situação: você tem uma aplicação web que possui uma página que lista os usuários do sistema. Porém, somente os usuários com o role “ADMIN” podem excluir informações dessa página. Na mesma aplicação existe um menu que dá acesso ao relatório de vendas do mês, mais somente quem é “SUPERVISOR” pode executar esse relatório. Dessa forma, um usuário que tem permissão tanto de excluir os usuários como executar o relatório de vendas deve estar associado aos roles “ADMIN” e “SUPERVISOR”.

...
Quer ler esse conteúdo completo? Tenha acesso completo