Java

 Segurança em Aplicação Web, com JAAS

Trabalho da Disciplina: Segurança SOA
Prof. Fabio Sakamoto

MBA em Desenvolvimento de Aplicações Java - SOA / FIAP
22/04/2012

Robson de Sousa Martins


Download do código-fonte:

Segurança em Aplicação Web, com JAAS (ZIP ~1,9MB)


Tecnologias empregadas:

  • JAAS;
  • Hash Criptográfico;
  • JBoss;
  • PrimeFaces/JSF;
  • JPA;
  • Banco de Dados MySQL.

Enunciado:

Criar um projeto web utilizando a segurança provida pelo JAAS para validar usuário e senha (criptografada), para a execução das seguintes funcionalidades:

  1. Cadastrar funcionário;
  2. Promover funcionário para gerente;
  3. Logout de usuário.

Este projeto deve ter os perfis de acesso:

  • funcionário;
  • gerente.

Sendo que:

  • A funcionalidade (1) seja acessada pelo funcionário e gerente.
  • A funcionalidade (2) seja acessada apenas pelo gerente.

A autenticação e a autorização devem ser feitos por uma classe que implemente uma segurança customizada com criptografia.


Arquivos do Pacote ZIP:

  • AvaliacaoJAAS.war: Projeto Java Web para o Eclipse, implementando a segurança com JAAS. Deve rodar num Server JBoss 6.1 corretamente configurado.
  • AvaliacaoJAAS_DatabaseCustom.zip: Projeto Java para o Eclipse, contendo a implementação da classe de segurança customizada. Deve ser feito o deploy dessa classe para o JBoss como JAR.
  • AvaliacaoJAAS.sql: Script para criar o schema e as tabelas no banco de dados MySQL.
  • JBossServerConfig.zip: Contém os arquivos de configuração necessários para o JBoss 6.1.

Detalhes sobre a Implementação:

Banco de Dados:

MySQL
Schema: seguranca
User: root / Senha: fiap

Configurado no arquivo seguranca-ds.xml (deve ir dentro do JBoss, no subdiretório deploy).

O Script do banco de dados já carrega uma base inicial, que contém os seguintes usuários fictícios:

Username Senha Nome Completo Cargo
fsakamotofsakamoto  Fabio Sakamoto Gerente
eendoeendo  Eduardo Endo Gerente
rmartinsrmartins  Robson de Sousa Martins Funcionário
aromanoaromano  Adriana Del Nero Romano Funcionário
cgoulartcgoulart  Christiny Belini Goulart Funcionário

A persistência dos dados é realizada via JPA.

Na classe GenericDAO, existe um atributo 'debugInfo', que pode ser alterado para true para imprimir no console as informações de debug (default = true).

Segurança JAAS:

A segurança JAAS é configurada no JBoss através do arquivo login-config.xml (deve ir dentro do JBoss, no subdiretório conf).

A classe contida no Projeto AvaliacaoJAAS_DatabaseCustom.zip, implementa uma segurança customizada em Banco de Dados com criptografia (hash) de senhas. Essa classe é a SegurancaDatabaseCustom.
Ela foi implementada a partir da classe DatabaseServerLoginModule, que já possui tudo o que é necessário para o acesso ao banco de dados pelo JAAS, simplificando o desenvolvimento.

As tabelas no banco de dados também possuem uma estrutura customizada nesse exercício.
Há duas tabelas, a user e a role, que representam, respectivamente, uma lista de usuários e uma lista de possíveis roles (papéis).

Interface Web com o Usuário:

A aplicação Web foi desenvolvida com o uso de Primefaces e JSF, e a segurança JAAS foi configurada sobre essa aplicação.

Há duas páginas principais:

cadastrar.jsf: Exibe o cadastro de usuários.
As permissões dessa página são:

Funcionário: pode alterar cadastro de funcionários, adicionar funcionários, remover funcionários.
Gerente: pode alterar cadastro de funcionários e gerentes, adicionar funcionários, remover funcionários e gerentes.

promover.jsf: Exibe a tela de promoção de funcionários para gerentes.
Somente um gerente pode acessar essa página.

Para ambos os papéis (funcionário e gerente) é possível realizar logout (sair da aplicação) e alterar a sua própria senha.


Detalhes de Uso:

  • Configurar JBoss com os arquivos XML e a lib do conector MySQL;
  • Rodar o script do banco de dados MySQL (user: root, senha: fiap);
  • Importar projetos no eclipse;
  • Exportar projeto AvaliacaoJAASDatabaseCustom como JAR para o diretório deploy do JBoss;
  • Rodar aplicação AvaliacaoJAAS no servidor JBoss;
  • Acessar as páginas:
    http://localhost:8080/AvaliacaoJAAS/cadastrar.jsf
    http://localhost:8080/AvaliacaoJAAS/promover.jsf
    e efetuar login com um dos usuários presentes na base de dados.

Versões das ferramentas e bibliotecas utilizadas:

  • Eclipse 3.6
  • Java JDK 1.6
  • Primefaces 3.2
  • JBoss 6.1
  • MySQL 5.5