Integração de usuários entre aplicações Senior e Portal Corporativo
Integre os usuários das aplicações Senior com o Portal Corporativo a partir do Login direto Senior ou com Logins numéricos.
Atenção
O acesso ao Portal Corporativo deve ser feito com o nome do usuário, e não com o e-mail. Além disso, o login do usuário não deve conter um dos seguintes caracteres: / # $ % < > " & *. Caso seja criado desta maneira, o usuário não poderá realizar o login.
Login direto Senior
Ao informar o usuário e a senha para autenticação no Portal, as informações são validadas diretamente na estrutura de usuários utilizadas pelos demais produtos Senior, isso significa que qualquer usuário cadastrado no Senior Gerenciador de Usuários pode logar no sistema sem processo algum de replicação adicional. Os dados dos usuários (nome, e-mail, grupos de usuário) são importados para o Portal Corporativo, e o mesmo tem o acesso disponibilizado de imediato.
Para utilizar o acesso através do Login direto Senior é necessário acessar a Central de Configurações Senior, em Opções de Segurança > Formas de logon por tipo de acesso e selecionar a mesma configuração para os itens Web 5.0, BrowserAccess e Web service. As opções suportadas pelo produto Portal Corporativo são Logon proprietário Senior e Logon com validação do usuário via LDAP.
O Login direto Senior utiliza a base de dados definida como padrão na Central de Configurações Senior, portanto, se em seu ambiente existe mais de uma base de dados configurada, verifique se a base padrão é a base de dados do ambiente correto para o Portal Corporativo autenticar os usuários.
Substituir replicação de usuários
- Certifique-se de desligar a replicação de usuários e grupos na Central de Configurações Senior
- Interrompa a execução do GlassFish onde se encontra instalado o Portal Corporativo;
- Efetue a atualização das libs do Liferay disponíveis na mídia em <MIDIA_DIR>\Performance Corporativa\portal\Instalação\liferay-6\liferayLibs. As instruções necessárias estão localizadas dentro da pasta, no arquivo LEIAME.txt;
- Abra o arquivo portal-ext.properties, localizado em <GLASSFISH_DIR>\domains\domain1\applications\liferay-portal-6.1.1\WEB-INF\lib e adicione as seguintes linhas ao final:
- auth.pipeline.pre=com.senior.portal.security.auth.G6Authenticator
- auth.pipeline.enable.liferay.check=false
- Depois de finalizar o deploy, copie da aplicação <GLASSFISH_DIR>\domains\domain1\applications\j2ee-modules\SLoginPortlet\WEB-INF\lib o arquivo g6-config para a pasta lib do Liferay;
- Execute o seguinte comando na base de dados do Portal Corporativo: update usergroup set parentusergroupid=111 where name like '%Portal%';
- Inicie a execução do GlassFish onde se encontra o Portal Corporativo instalado.
Instalações novas do Portal Base
Execute os passos abaixo após a instalação do Portal Base:
- Certifique-se de que as caixas de seleção Replicar usuários e Replicar Grupos estão desmarcadas na Central de Configurações Senior, em Sistemas > Performance Corporativa > Portal Corporativo > Integração de Usuários;
- Pare o serviço do GlassFish em que foi instalado o Portal Corporativo;
- O arquivo g6-config.jar deve ser copiado da aplicação para a pasta de biblioteca do Liferay. Para isso, copie o arquivo:
- De:
<GLASSFISH_DIR>\domains\domain\aplications\SLoginPortlet\WEB-INF\lib\ - Para: <GLASSFISH_DIR>\domains\domain1\aplications\liferay-portal-6.1.1\WEB-INF\lib\
- De:
- Inicie o serviço do GlassFish em que se encontra o Portal Corporativo instalado.
Configurar Central de Configurações Senior
- Acesse a Central de Configurações Senior, em Sistemas > Performance Corporativo > Portal Corporativo > Integração de Usuários e faça a sua configuração:
- Acesse o item Banco de dados e selecione a base de dados que a ser utilizada para realizar a integração de usuários. É necessário informar os itens Aplicativos Java:
Portal integrado ao servidor LDAP
Atenção
A partir da versão 6.2.29, o uso de LDAP, no Portal Corporativo, deve ser feita através da autenticação direta. Com essa mudança, a integração com outros meios de autenticação se torna de responsabilidade do Senior Gerenciador de Usuários. Possibilitando uma melhor performance e a diminuição de falhas da configuração. Os usuários e grupos existentes do SGU são replicados para a base do Liferay, tornando a integração dos grupos transparente nesse novo formato.
O Portal Corporativo integrado ao servidor LDAP é utilizado quando existe um diretório de usuários e com a necessidade de utilizar estes usuários já existentes para autenticação no Portal Corporativo. Para usar LDAP no Portal é necessário ativar o Login direto Senior.
Para que o Portal Corporativo valide os usuários disponíveis em um diretório de usuários, é necessário que o Login direto nas aplicações Senior esteja ativado e que o LDAP esteja configurado Central de Configuração, em Opções de Segurança > LDAP e NTLM, além de estar habilitado para as seguintes formas de acesso: Web 5.0, BrowserAccess e Web service.
Além disso, deve ser configurado o logon via LDAP para a autenticação via SeniorTools no Central de Configurações Senior, em SeniorTools > Autenticação, basta escolher LDAP como forma de autenticação.
Importante
Caso a forma de logon SeniorTools não esteja disponível, proceda da seguinte maneira: Na configuração de Chave, crie uma nova chave com o Nome com.senior.system_access.access_kind.seniortools e Valor ldap.
Com o Portal integrado com servidor LDAP é possível também configurar a importação automática dos usuários para a base do Senior Gerenciador de Usuários. Esta opção encontra-se disponível em cada produto dentro de Sistemas > {Nome do Produto} > Autenticação de usuários.
Ao acessar a tela, basta habilitar a caixa de seleção em “Permitir o cadastro automático de novos usuários no login e importação”. Após esta configuração todo usuário que se autenticar no Portal será automaticamente importado para o SGU. Não esqueça que os usuários criados devem estar associados com algum cadastro no sistema para poder visualizar informações pessoais.
Logins numéricos
O Liferay permite a utilização de uma sequência numérica como nome de usuário. É possível, por exemplo, cadastrar a matrícula dos colaboradores como login. Todavia, não é recomendável usar somente caracteres numéricos, pois há o risco do número ser idêntico a um ID já existente no banco de dados. Neste caso, o sistema não permite a criação do usuário. A melhor solução é usar ao menos uma letra junto aos números.
Se for imprescindível cadastrar logins numéricos, é necessário ajustar o banco de dados de acordo com o procedimento abaixo para evitar conflitos com os IDs das tabelas.
- Desligue o Portal;
- Execute o seguinte comando SQL para alterar o contador que gera os IDs na tabela GROUP_;
UPDATE Counter SET currentId = (currentId + 1000000000) WHERE name = 'com.liferay.counter.model.Counter';
Observação
O comando altera o campo groupid para um valor maior do que o máximo que o Gestão de Pessoas | HCM aceita, evitando assim um possível conflito com logins numéricos. O procedimento considera que seja utilizado o numcad do colaborador, que é um número com dez dígitos. - Reinicie o Portal.
É necessário realizar um ajuste maior na base de dados, com comandos diferentes de acordo com o tipo de banco utilizado.
- Desligue o Portal;
- Execute os selects abaixo para gerar updates para as tabelas portletpreferences e journalarticle. O resultado deve ser copiado e executado;
select 'update portletpreferences set preferences = replace(preferences, ''' || groupid || ''', ''' || (groupid + 1000000000) || ''') where portletpreferencesid=' || portletpreferencesid || ';'
as comando
from (
select portletpreferencesid, to_number( regexp_substr(preferences, 'groupId\<\/name\>\<value\>(\d+)\<\/value\>', 1,1,NULL, 1) ) groupid
from portletpreferences
where preferences like '%groupId</name><value>%'
)
select 'update JournalArticle set content = replace(content, ''/documents/' || grupo || '/'', ''/documents/' || (grupo + 1000000000) || '/'') where id_=' || id_ || ';' as comando
from (
select to_number(regexp_substr(content, '\/documents\/(\d+)\/', 1,1,NULL, 1)) grupo, id_ from JournalArticle where content like '%/documents/%'
) - Execute os comandos para atualização do banco;
UPDATE assetcategory SET groupId = (groupId + 1000000000);
UPDATE assetentry SET groupId = (groupId + 1000000000);
UPDATE assettag SET groupId = (groupId + 1000000000);
UPDATE assetvocabulary SET groupId = (groupId + 1000000000);
UPDATE blogsentry SET groupId = (groupId + 1000000000);
UPDATE blogsstatsuser SET groupId = (groupId + 1000000000);
UPDATE bookmarksentry SET groupId = (groupId + 1000000000);
UPDATE bookmarksfolder SET groupId = (groupId + 1000000000);
UPDATE calevent SET groupId = (groupId + 1000000000);
UPDATE ddlrecord SET groupId = (groupId + 1000000000);
UPDATE ddlrecordset SET groupId = (groupId + 1000000000);
UPDATE ddlrecordversion SET groupId = (groupId + 1000000000);
UPDATE ddmcontent SET groupId = (groupId + 1000000000);
UPDATE ddmstructure SET groupId = (groupId + 1000000000);
UPDATE ddmtemplate SET groupId = (groupId + 1000000000);
UPDATE dlcontent SET groupId = (groupId + 1000000000);
UPDATE dlfileentry SET groupId = (groupId + 1000000000), repositoryid=(repositoryid + 1000000000);
UPDATE dlfileentrytype SET groupId = (groupId + 1000000000);
UPDATE dlfilerank SET groupId = (groupId + 1000000000);
UPDATE dlfileshortcut SET groupId = (groupId + 1000000000);
UPDATE dlfileversion SET groupId = (groupId + 1000000000), repositoryid=(repositoryid + 1000000000);
UPDATE dlfolder SET groupId = (groupId + 1000000000), repositoryid=(repositoryid + 1000000000);
update dlsync set repositoryid=(1000000000 + repositoryid);
UPDATE Group_ SET groupId = (groupId + 1000000000);
UPDATE groups_orgs SET groupId = (groupId + 1000000000);
UPDATE groups_permissions SET groupId = (groupId + 1000000000);
UPDATE groups_roles SET groupId = (groupId + 1000000000);
UPDATE groups_usergroups SET groupId = (groupId + 1000000000);
UPDATE journalarticle SET groupId = (groupId + 1000000000);
UPDATE journalarticleimage SET groupId = (groupId + 1000000000);
UPDATE journalarticleresource SET groupId = (groupId + 1000000000);
UPDATE journalcontentsearch SET groupId = (groupId + 1000000000);
UPDATE journalfeed SET groupId = (groupId + 1000000000);
UPDATE journalstructure SET groupId = (groupId + 1000000000);
UPDATE journaltemplate SET groupId = (groupId + 1000000000);
UPDATE layout SET groupId = (groupId + 1000000000);
UPDATE layoutbranch SET groupId = (groupId + 1000000000);
UPDATE layoutrevision SET groupId = (groupId + 1000000000);
UPDATE layoutset SET groupId = (groupId + 1000000000);
UPDATE layoutsetbranch SET groupId = (groupId + 1000000000);
UPDATE mbban SET groupId = (groupId + 1000000000);
UPDATE mbcategory SET groupId = (groupId + 1000000000);
UPDATE mbmailinglist SET groupId = (groupId + 1000000000);
UPDATE mbmessage SET groupId = (groupId + 1000000000);
UPDATE mbstatsuser SET groupId = (groupId + 1000000000);
UPDATE mbthread SET groupId = (groupId + 1000000000);
UPDATE mdraction SET groupId = (groupId + 1000000000);
UPDATE mdrrule SET groupId = (groupId + 1000000000);
UPDATE mdrrulegroup SET groupId = (groupId + 1000000000);
UPDATE mdrrulegroupinstance SET groupId = (groupId + 1000000000);
UPDATE membershiprequest SET groupId = (groupId + 1000000000);
UPDATE orggrouppermission SET groupId = (groupId + 1000000000);
UPDATE orggrouprole SET groupId = (groupId + 1000000000);
UPDATE pollsquestion SET groupId = (groupId + 1000000000);
UPDATE portletitem SET groupId = (groupId + 1000000000);
UPDATE repository SET groupId = (groupId + 1000000000);
UPDATE repositoryentry SET groupId = (groupId + 1000000000);
UPDATE resourceblock SET groupId = (groupId + 1000000000);
UPDATE resourcetypepermission SET groupId = (groupId + 1000000000);
UPDATE scframeworkversion SET groupId = (groupId + 1000000000);
UPDATE scproductentry SET groupId = (groupId + 1000000000);
UPDATE scproductscreenshot SET groupId = (groupId + 1000000000);
UPDATE shoppingcart SET groupId = (groupId + 1000000000);
UPDATE shoppingcategory SET groupId = (groupId + 1000000000);
UPDATE shoppingcoupon SET groupId = (groupId + 1000000000);
UPDATE shoppingitem SET groupId = (groupId + 1000000000);
UPDATE shoppingorder SET groupId = (groupId + 1000000000);
UPDATE socialactivity SET groupId = (groupId + 1000000000);
UPDATE socialactivityachievement SET groupId = (groupId + 1000000000);
UPDATE socialactivitycounter SET groupId = (groupId + 1000000000);
UPDATE socialactivitylimit SET groupId = (groupId + 1000000000);
UPDATE socialactivitysetting SET groupId = (groupId + 1000000000);
UPDATE socialrequest SET groupId = (groupId + 1000000000);
UPDATE team SET groupId = (groupId + 1000000000);
UPDATE usergroupgrouprole SET groupId = (groupId + 1000000000);
UPDATE usergrouprole SET groupId = (groupId + 1000000000);
UPDATE users_groups SET groupId = (groupId + 1000000000);
UPDATE wikinode SET groupId = (groupId + 1000000000);
UPDATE wikipage SET groupId = (groupId + 1000000000);
UPDATE workflowdefinitionlink SET groupId = (groupId + 1000000000);
UPDATE workflowinstancelink SET groupId = (groupId + 1000000000);
UPDATE Counter SET currentId = (currentId + 1000000000) WHERE name = 'com.liferay.counter.model.Counter';
update group_ set friendlyurl = ('/' || to_char(groupid))
where friendlyurl is not null
and LENGTH(TRIM(TRANSLATE(substr(friendlyurl, 2), ' +-.0123456789', ' '))) is null
- Reinicie o Portal.
- Desligue o Portal;
- Execute os selects abaixo para gerar updates para as tabelas portletpreferences e journalarticle. O resultado deve ser copiado e executado. O comando foi testado na versão 2012 do SQL Server;
select ('update portletpreferences set preferences = replace(cast(preferences as nvarchar(max)), ''' + cast(groupid as varchar(max)) +
''', ''' + cast((groupid + 1000000000) as varchar(max)) + ''') where portletpreferencesid=' + cast(portletpreferencesid as varchar(max)) +';') as comando
from (
select portletpreferencesid, substring(preferences, initindex+21, finalindex-1) as groupid
from (
select preferences
, portletpreferencesid
, PATINDEx('%groupId</name><value>%', preferences) initindex
, patindex('%<%', substring(preferences, PATINDEx('%groupId</name><value>%', preferences)+21, 15)) finalindex
from PortletPreferences
where preferences like '%groupId</name><value>%'
) as querygroupid
) as querycommand
select ('update JournalArticle set content = replace(cast(content as nvarchar(max)), ''/documents/' + cast(groupid as varchar(max)) + '/'', ''/documents/' +
cast((groupid + 1000000000) as varchar(max)) + '/'') where id_=' + cast(id_ as varchar(max)) + ';') as comando
from (
select id_, substring(content, initindex+11, finalindex-1) as groupid
from (
select id_, content
, patindex('%/documents/%', content) as initindex
, patindex('%/%', substring(content, patindex('%/documents/%', content)+11, 15)) as finalindex
from JournalArticle
where content like '%/documents/%'
) as querygroupid
) as querycoommand
- Execute os comandos para atualização do banco;
UPDATE assetcategory SET groupId = (groupId + 1000000000);
UPDATE assetentry SET groupId = (groupId + 1000000000);
UPDATE assettag SET groupId = (groupId + 1000000000);
UPDATE assetvocabulary SET groupId = (groupId + 1000000000);
UPDATE blogsentry SET groupId = (groupId + 1000000000);
UPDATE blogsstatsuser SET groupId = (groupId + 1000000000);
UPDATE bookmarksentry SET groupId = (groupId + 1000000000);
UPDATE bookmarksfolder SET groupId = (groupId + 1000000000);
UPDATE calevent SET groupId = (groupId + 1000000000);
UPDATE ddlrecord SET groupId = (groupId + 1000000000);
UPDATE ddlrecordset SET groupId = (groupId + 1000000000);
UPDATE ddlrecordversion SET groupId = (groupId + 1000000000);
UPDATE ddmcontent SET groupId = (groupId + 1000000000);
UPDATE ddmstructure SET groupId = (groupId + 1000000000);
UPDATE ddmtemplate SET groupId = (groupId + 1000000000);
UPDATE dlcontent SET groupId = (groupId + 1000000000);
UPDATE dlfileentry SET groupId = (groupId + 1000000000), repositoryid=(repositoryid + 1000000000);
UPDATE dlfileentrytype SET groupId = (groupId + 1000000000);
UPDATE dlfilerank SET groupId = (groupId + 1000000000);
UPDATE dlfileshortcut SET groupId = (groupId + 1000000000);
UPDATE dlfileversion SET groupId = (groupId + 1000000000), repositoryid=(repositoryid + 1000000000);
UPDATE dlfolder SET groupId = (groupId + 1000000000), repositoryid=(repositoryid + 1000000000);
update dlsync set repositoryid=(1000000000 + repositoryid);
UPDATE Group_ SET groupId = (groupId + 1000000000);
UPDATE groups_orgs SET groupId = (groupId + 1000000000);
UPDATE groups_permissions SET groupId = (groupId + 1000000000);
UPDATE groups_roles SET groupId = (groupId + 1000000000);
UPDATE groups_usergroups SET groupId = (groupId + 1000000000);
UPDATE journalarticle SET groupId = (groupId + 1000000000);
UPDATE journalarticleimage SET groupId = (groupId + 1000000000);
UPDATE journalarticleresource SET groupId = (groupId + 1000000000);
UPDATE journalcontentsearch SET groupId = (groupId + 1000000000);
UPDATE journalfeed SET groupId = (groupId + 1000000000);
UPDATE journalstructure SET groupId = (groupId + 1000000000);
UPDATE journaltemplate SET groupId = (groupId + 1000000000);
UPDATE layout SET groupId = (groupId + 1000000000);
UPDATE layoutbranch SET groupId = (groupId + 1000000000);
UPDATE layoutrevision SET groupId = (groupId + 1000000000);
UPDATE layoutset SET groupId = (groupId + 1000000000);
UPDATE layoutsetbranch SET groupId = (groupId + 1000000000);
UPDATE mbban SET groupId = (groupId + 1000000000);
UPDATE mbcategory SET groupId = (groupId + 1000000000);
UPDATE mbmailinglist SET groupId = (groupId + 1000000000);
UPDATE mbmessage SET groupId = (groupId + 1000000000);
UPDATE mbstatsuser SET groupId = (groupId + 1000000000);
UPDATE mbthread SET groupId = (groupId + 1000000000);
UPDATE mdraction SET groupId = (groupId + 1000000000);
UPDATE mdrrule SET groupId = (groupId + 1000000000);
UPDATE mdrrulegroup SET groupId = (groupId + 1000000000);
UPDATE mdrrulegroupinstance SET groupId = (groupId + 1000000000);
UPDATE membershiprequest SET groupId = (groupId + 1000000000);
UPDATE orggrouppermission SET groupId = (groupId + 1000000000);
UPDATE orggrouprole SET groupId = (groupId + 1000000000);
UPDATE pollsquestion SET groupId = (groupId + 1000000000);
UPDATE portletitem SET groupId = (groupId + 1000000000);
UPDATE repository SET groupId = (groupId + 1000000000);
UPDATE repositoryentry SET groupId = (groupId + 1000000000);
UPDATE resourceblock SET groupId = (groupId + 1000000000);
UPDATE resourcetypepermission SET groupId = (groupId + 1000000000);
UPDATE scframeworkversion SET groupId = (groupId + 1000000000);
UPDATE scproductentry SET groupId = (groupId + 1000000000);
UPDATE scproductscreenshot SET groupId = (groupId + 1000000000);
UPDATE shoppingcart SET groupId = (groupId + 1000000000);
UPDATE shoppingcategory SET groupId = (groupId + 1000000000);
UPDATE shoppingcoupon SET groupId = (groupId + 1000000000);
UPDATE shoppingitem SET groupId = (groupId + 1000000000);
UPDATE shoppingorder SET groupId = (groupId + 1000000000);
UPDATE socialactivity SET groupId = (groupId + 1000000000);
UPDATE socialactivityachievement SET groupId = (groupId + 1000000000);
UPDATE socialactivitycounter SET groupId = (groupId + 1000000000);
UPDATE socialactivitylimit SET groupId = (groupId + 1000000000);
UPDATE socialactivitysetting SET groupId = (groupId + 1000000000);
UPDATE socialrequest SET groupId = (groupId + 1000000000);
UPDATE team SET groupId = (groupId + 1000000000);
UPDATE usergroupgrouprole SET groupId = (groupId + 1000000000);
UPDATE usergrouprole SET groupId = (groupId + 1000000000);
UPDATE users_groups SET groupId = (groupId + 1000000000);
UPDATE wikinode SET groupId = (groupId + 1000000000);
UPDATE wikipage SET groupId = (groupId + 1000000000);
UPDATE workflowdefinitionlink SET groupId = (groupId + 1000000000);
UPDATE workflowinstancelink SET groupId = (groupId + 1000000000);
UPDATE Counter SET currentId = (currentId + 1000000000) WHERE name = 'com.liferay.counter.model.Counter';
update group_ set friendlyurl = ('/' + cast(groupid as varchar(max)))
where friendlyurl is not null
and ISNUMERIC( substring(friendlyurl, 2, len(friendlyurl)) ) = 1;
- Reinicie o Portal.