WebCenter Portal - Configurando permissão de acesso usando Enterprise Roles
Por Waslley Souza ,
Postado em Março 2015
Quando criamos uma aplicação que necessita de controle de acesso, precisamos definir os usuários e grupos que devem ter acesso ao sistema e suas permissões. Geralmente em grandes empresas, esses dados estão armazenados em serviços de diretórios e/ou em banco de dados. Como exemplos de serviços de diretórios temos o Oracle Internet Directory (OID) da Oracle e o Active Directory (AD) da Microsoft.
Utilizando o WebLogic Server como servidor de aplicações, a configuração de serviços de diretórios ou banco de dados para consulta de usuários e permissões é bem simples de ser realizada.
Nesse artigo iremos aprender a configurar o WebLogic Server para consultar usuários e grupos do banco de dados e aplicar permissões de acesso por grupo em uma aplicação WebCenter. Não será apresentada a utilização de um serviço de diretórios.
Primeiramente devemos criar as tabelas de usuário e permissões no banco de dados. Para facilitar podemos utilizar a estrutura padrão que o WebLogic espera encontrar.
Nesse exemplo irei utilizar o schema HR. Execute o script abaixo no seu banco de dados para criar as tabelas.
CREATE TABLE USERS (
U_NAME VARCHAR(200) NOT NULL,
U_PASSWORD VARCHAR(50) NOT NULL,
U_DESCRIPTION VARCHAR(1000));
ALTER TABLE USERS ADD CONSTRAINT PK_USERS PRIMARY KEY (U_NAME);
CREATE TABLE GROUPS (
G_NAME VARCHAR(200) NOT NULL,
G_DESCRIPTION VARCHAR(1000));
ALTER TABLE GROUPS ADD CONSTRAINT PK_GROUPS PRIMARY KEY (G_NAME);
CREATE TABLE GROUPMEMBERS (
G_NAME VARCHAR(200) NOT NULL,
G_MEMBER VARCHAR(200) NOT NULL);
ALTER TABLE GROUPMEMBERS
ADD CONSTRAINT PK_GROUPMEMS
PRIMARY KEY (G_NAME, G_MEMBER);
ALTER TABLE GROUPMEMBERS
ADD CONSTRAINT FK1_GROUPMEMBERS
FOREIGN KEY ( G_NAME )
REFERENCES GROUPS (G_NAME)
ON DELETE CASCADE;
-- Create two users: user1 and user2
insert into USERS (U_NAME, U_PASSWORD, U_DESCRIPTION) values ('user1', 'user1', null);
insert into USERS (U_NAME, U_PASSWORD, U_DESCRIPTION) values ('user2', 'user2', null);
-- Create two groups: Administrator and User
insert into GROUPS (G_NAME, G_DESCRIPTION) values ('weblogic-admin', 'Administrator Group');
insert into GROUPS (G_NAME, G_DESCRIPTION) values ('weblogic-user', 'User Group');
-- Create associations
insert into GROUPMEMBERS (G_NAME, G_MEMBER) values ('weblogic-admin', 'user1');
insert into GROUPMEMBERS (G_NAME, G_MEMBER) values ('weblogic-user', 'user2');
Pronto, as tabelas foram criadas!
Agora devemos configurar o WebLogic. Primeiro vamos criar o datasource de conexão com o banco de dados. Acesse o Console de Administração e no menu em árvore navegue até Serviços > Origens de Dados. Clique em Novo e selecione Origem de Dados Genérica.
Informe o nome, nome da JNDI e tipo de banco de dados, e clique em Próximo.
Clique em Próximo.
Clique em Próximo.
Informe as propriedades de conexão com o banco de dados, e clique em Próximo.
Clique em Testar Configuração para fazer o teste de conexão. Caso seja bem-sucedido, clique em Próximo.
Selecione o seu servidor, e clique em Finalizar.
Uma mensagem solicitando a reinicialização do servidor é exibida, mas não faça isso ainda.
Agora precisamos configurar o nosso provedor de Autenticação. No menu em árvore, navegue até Realms de Segurança > myrealm.
Selecione a aba Provedores, e clique no botão Novo para criar um novo Provedor de Autenticação do tipo SQLAuthenticator que irá consultar as nossas tabelas.
Informe o nome, por exemplo SQLAuthenticator, e o tipo SQLAuthenticator. Clique em OK.
A mensagem solicitando a reinicialização do servidor é exibida novamente, mas não faça isso ainda. Clique em Reordenar e coloque o SQLAuthenticator na primeira posição. Clique em OK.
Acesse o SQLAuthenticator criado e selecione a aba Comum. No campo Flag de Controle, selecione a opção SUFFICIENT, e clique em Salvar. Com a opção SUFFICIENT, caso o usuário seja encontrado no provedor, o WebLogic Server não procura nos outros provedores.
Selecione a aba Específico do Provedor, selecione a opção Senhas de Texto Sem Formatação Ativadas, e no campo Nome da Origem de Dados informe o nome do Datasource criado anteriormente, e clique em Salvar.
Agora é necessário reiniciar o WebLogic Server para que essas alterações tenham efeito. Após o reinício, acesse novamente o Console de Administração para verificar se a configuração foi feita corretamente. Para isso, acesse o menu em árvore e navegue até Realms de Segurança > myrealm > Provedores > Usuários e Grupos. Note que os usuários user1 e user2 aparecem na listagem.
Pronto! Todas as configurações necessárias no WebLogic Server foram feitas! Agora vamos apenas fazer o mapeamento dos grupos na aplicação WebCenter Portal.
Abra o arquivo jazn-data.xml e na aba Enterprise Roles crie roles com os mesmos nomes dos grupos criados no banco de dados.
Na aba Application Roles, crie as roles necessárias para o projeto, e na seção Mappings, adicione as Enterprises Roles criadas.
Altere uma opção no Security Deployment pois não queremos que os usuários e grupos criados no WebCenter sejam propagados para o WebLogic Server. No Jdeveloper, acesse Application > Secure > Configure Security Deployment e desmarque a opção Users and Groups.
É possível utilizar dois arquivos para definir as permissões de acesso utilizando as roles criadas: pages.xml e jazn-data.xml.
pages.xml: Esse arquivo define a estrutura de navegação do portal, e aqui as permissões podem ser herdadas de pai pra filho, ou não. Esse arquivo só contém páginas.
Para realizarmos o teste das permissões, criei as páginas userPage.jspx, adminPage.jspx e adminUserPage.jspx, e as adicionei no pages.xml.
As permissões foram definidas da seguinte maneira:
- userPage.jspx: userRole -> view
- adminPage.jspx: adminRole -> view
- adminUserPage.jspx: userRole → view, adminRole → view
jazn-data.xml: Na aba Resource Grants desse arquivo, são definidas as permissões para todos os outros arquivos, como por exemplo, páginas que não estejam associadas ao arquivo pages.xml, task flows, etc.
Para realizarmos o teste das permissões, criei a Task Flow DepartmentTaskFlow, adicionei ao projeto Portal e adicionei a permissão de visualização para a role adminRole. Assim, só o usuário associado a role adminRole irá visualizar esse Task Flow.
Adicionei o Task Flow como region na página adminUserPage.jspx. As duas roles têm permissão de visualização dessa página, mas apenas a role adminRole irá visualizar o Task Flow na página.
Pronto, vamos testar a aplicação! Acessando com o usuário user1, as páginas adminPage e adminUserPage irão aparecer no menu.
Como o user1 é do grupo weblogic-admin, o Task Flow aparece na página adminUserPage.
Acessando com o usuário user2, as páginas userPage e adminUserPage irão aparecer no menu.
Como o user2 é do grupo weblogic-user, o Task Flow não aparece na página adminUserPage.
Waslley Souza é Consultor Oracle com foco em tecnologias Oracle Fusion Middleware e SOA. Pós-graduado em Engenharia de Software (SOA) e bacharel em Ciências da Computação. Certificado Oracle WebCenter Portal, Oracle ADF e Java. Siga Waslley Souza em seu blog .
Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.