[ARTIGO] FERRAMENTA OLAP OBIEE - TROCA DE SENHA - ERA UM PROBLEMA!


Resultado de imagem para obiee

Alteração de Senha do usuário no OBIEE

Autores:     Marcio Oliveira da Franca ─ https://br.linkedin.com/in/marciooliveirafranca
                     Vinícius Oliveira ─ https://br.linkedin.com/pub/vinicius-oliveira/19/8ba/ab/pt


Ao implantarmos o Oracle Business Intelligence Enterprise Edition 11G (OBIEE) em nossa empresa, nos deparamos com um problema que gera bastante desconforto, o gerenciamento de senhas de acesso dos usuários. A impossibilidade de alteração de senha dificulta o controle de acessos pelos próprios usuários em um sistema de tomada de decisões.

Oficialmente a Oracle não fornece solução para esse problema. Após muita pesquisa notamos que diversas pessoas passavam pelo mesmo problema.

Chegamos a uma solução e a testamos em uma máquina Windows com sucesso, porém ao testarmos no ambiente de produção com uma máquina que utiliza o sistema Linux, não obtivemos sucesso. 

Passamos muito tempo estudando uma forma de fazer e chegamos a uma solução. Decidimos então compartilhar com a comunidade nossa experiência.

A seguir iremos demonstrar um passo a passo de como resolver o problema. Os caminhos das pastas podem ser diferentes de uma instalação para outra, então tentem chegar ao mais próximo possível. 

Essa solução é apenas para o OBIEE 11G.

Primeiro baixem o JDeveloper 11.1.1.7.0 (Link: http://www.oracle.com/technetwork/developer-tools/jdev/downloads/jdeveloper11117-1917330.html).

Abram o JDeveloper. Na primeira tela deixe a opção Default Role marcada e clique em OK.



Crie uma Nova Aplicação.

Nomeie como Changepwd, selecione Generic Application e clique em Next.


Nomeie o projeto PasswordChange, selecione Java na aba Project Technology. Clique em Next.


Nomeie o Default Package como Changepwd. Clique em Finish.


Crie uma nova Classe Java. Selecione Java Class e clique em OK.


Nomeie a classe como Changepwd.


Copie o código Java abaixo e cole no arquivo Changepwd.java. Os parâmetros webLogicHostname, 

webLogicPort, webLogicUsername e webLogicPassword devem ser setados com os seus dados.
package Changepwd;

import java.io.IOException;
import java.net.MalformedURLException;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.util.HashMap;
import java.util.Hashtable;
import javax.naming.Context;

@WebService
public class Changepwd
{
    private static JMXConnector jmxConnector = null;
    private static MBeanServerConnection mBeanServerConnection = null;

    private static String webLogicHostname = "HOST"; // Host do weblogic ex: 10.1.1.2
    private static String webLogicPort = "PORTA"; // Porta do weblogic padrão é 7001
    private static String webLogicUsername = "USUARIO"; // Usuário admin do weblogic
    private static String webLogicPassword = "SENHA"; // Senha do usuário
   
    private static final String validationFailed = "[Security:090237]";
    private static final String mustBeEightChars = "[Security:090285]";
    private static final String missingSpecialChars = "[Security:099116]";
   
    public Changepwd() {} // Para JAXB

    @WebMethod(exclude = true)
    public String changeUserPassword( String userId, String oldPassword, String newPassword, String confirmPassword ) throws Exception
    {  
        ObjectName securityMBeanName = new ObjectName("Security:Name=myrealmDefaultAuthenticator");
        Object objUser[] = new Object[]{(userId), (oldPassword), (newPassword) };
        String objStr[] = new String[]{("java.lang.String"), ("java.lang.String"), ("java.lang.String") };
         try
         {
              if ( confirmPassword.equals(newPassword) )
              {
                mBeanServerConnection.invoke(securityMBeanName, "changeUserPassword", objUser, objStr);
                return "Senha alterada com sucesso.";
            }
            else
            {
                return "A nova senha não coincide com a confirmação de senha.";
            }
        }
        catch (Exception e)
        {           
            if( e.getCause().getMessage().contains( validationFailed ) )
                return "A validação da senha antiga falhou.";
            else if ( e.getCause().getMessage().contains( mustBeEightChars ) )
                return "A senha deve ter ao menos 8 caracteres.";
            else if ( e.getCause().getMessage().contains( missingSpecialChars ) )
                return "A senha deve ter pelo menos 1 caracter especial.";
            else
                return "A senha não pode ser alterada no momento. Favor entrar em contato com o Administrador.";           
        }
    }

    @WebMethod(exclude = true)
    public static void initConnection(String hostname, String portString) throws IOException, MalformedURLException
    {
        Integer portInteger = Integer.valueOf(portString);
        int port = portInteger.intValue();
        String mserver = "/weblogic.management.mbeanservers.runtime";
        JMXServiceURL serviceURL = new JMXServiceURL("service:jmx:iiop:///jndi/iiop://" + hostname + ":" + port + mserver);

        Hashtable h = new Hashtable();
        String[] credentials = new String[] {webLogicUsername, webLogicPassword };
        h.put("jmx.remote.credentials", credentials);
       
        jmxConnector = JMXConnectorFactory.connect(serviceURL, h);
        mBeanServerConnection = jmxConnector.getMBeanServerConnection();
    }
    @WebMethod
    public String passwordChange(@WebParam(name = "arg0")
        String userId, @WebParam(name = "arg1")
        String oldPassword, @WebParam(name = "arg2")
        String newPassword, @WebParam(name = "arg3")
        String confirmPassword ) throws Exception
    {
        Changepwd c = new Changepwd();       
        initConnection(webLogicHostname, webLogicPort);       
        String result = c.changeUserPassword( userId, oldPassword, newPassword, confirmPassword );       
        jmxConnector.close();       
        return result;
    }

Salve e clique com o botão direito em cima da sua classe Changepwd.java e selecione Webservice Properties.






Selecione Java EE 1.5, with support for JAX-WS Annotations e clique em OK.


Selecione Methods e escolha o método passwordChange e clique em OK.


Agora vamos fazer o deploy do serviço para o servidor weblogic. Clique com o botão direito em cima do projeto PasswordChange e clique em DeployàWebServices.


Selecione Deploy to Application Server e clique em Next.



Clique  NO SIMBOLO DE "+"  para adicionar uma conexão com o Weblogic Server.


 Dê um nome a conexão e escolha o tipo de conexão Weblogic 10.3 e clique em Next.


Coloque o usuário e senha do administrador Weblogic e clique em Next.


Configure o Host, porta e domínio do seu servidor Weblogic e clique em Next.


Teste sua conexão e clique em Finish.


Selecione o Application Server da conexão que foi criada e clique em Next.


Selecione Deploy to selected instances in the domain, marque somente bi_cluster, selecione Deploy as standalone Application e clique em Finish.


Irá abrir uma aba na parte de inferior do JDeveloper chamada Deployment. Verifique se o deploy foi feito com sucesso, isso pode demorar um pouco.


Se tudo correu bem reinicie o serviço do OBIEE para que a nossa aplicação fique disponível como serviço do weblogic. Caso tenha ocorrido algum erro revise todos os passos para ver se tudo foi feito corretamente.

Após a conclusão dessa etapa iremos trabalhar agora no OBIEE, para podermos criar a chamada para a aplicação.




Acesse o seu portal pelo navegador (http://SEUHOST:9704/analytics).


Crie um novo Painel e nomeia-o como Configurar Senha. Clique em Local->Procurar Catálogo.


Crie uma nova pasta em Pastas Compartilhadas e nomeie-a como Conta do Usuario.


Selecione Incluir conteúdo posteriormente (Criar painel vazio) e clique em OK.


Clique no link Catálogo e navegue até a pasta que foi criada (Conta do Usuario).
Clique em MaisàPermissões.


Dê permissão a BI Administrator de Controle Total e a BI Consumer de Abrir. Selecione Aplicar permissões a subpastas e Aplicar permissões aos itens na pasta e clique em OK.


Crie uma nova Ação.


Clique em Chamar um Web Service.







Coloque em WSDL URL: http://SEUHOST:PORTA/Changepwd-PasswordChange-context-root/ChangepwdPort?WSDL

Ex: http://10.1.1.2:9704/Changepwd-PasswordChange-context-root/ChangepwdPort?WSDL
Clique em abrir. Navegue nas pastas até chegar no arquivo passwordChange, selecione-o e clique em OK.

Na janela que se abre configure os parâmetros da seguinte forma:
·        passwordChange_arg0 = Usuário:
·        passwordChange_arg1 = Senha Atual:
·        passwordChange_arg2 = Nova Senha:
·        passwordChange_arg3 = Confirmar Nova Senha:
Para o Usuário selecione no Valor como Variável de sessão, escreva USER e marque Fixo e Oculto. Clique em Opções.


Coloque em Título do Diálogo "Alterar Senha".
Coloque em Texto de Ajuda da Ação "Favor entrar com sua senha atual e uma nova senha".
Coloque em Texto do Botão Executar "Alterar Senha".
Clique na aba Resultados da Ação.


Coloque em Texto do Diálogo " @{passwordChangeResponse} ".
Coloque em Nome " passwordChangeResponse ".
Coloque em Expressão XPath " Body/passwordChangeResponse/return ".
Coloque em Título do Diálogo "Resultado".
Clique em OK. Clique em Salvar Ação.



Salve a Ação na pasta que criamos (Conta do Usuario) e nomeie como Alterar Senha.


Clique em Catálogo e navegue até o painel que criamos (Configurar Senha).
Clique em editar no painel. Coloque um objeto Seção e coloque um objeto Texto dentro da seção. Clique em propriedades no objeto Texto.
Marque a caixa Contém Marcação HTML e cole o texto abaixo:


Alteração de senha

Bem Vindo a página de alteração de senha. Essa página permite que você possa realizar a modificação de sua senha de acesso ao portal.


Você está atualmente logado como @{biServer.variables['NQ_SESSION.USER']}

Por favor clique no link abaixo para iniciar o processo de alteração da senha.

Clique em visualizar para ver como ficou e clique em OK.
O texto pode ser alterado da forma que quiser, lembrando que as variáveis devem ser mantidas.


Clique em propriedades da coluna, clique em Personalizar Opções de Estilo CSS (HTML Somente), marque Usar Estilo CSS personalizado, cole o texto abaixo e clique em OK.


·        position:absolute;height:120px; margin-top:10px;
Coloque um objeto Link Dinâmico de Ação, clique em propriedades do link dinâmico.

Em Texto do Link Dinâmico " Alterar Senha". Clique em    configurações  e navegue até a pasta (Conta do Usuario) onde está salva nossa ação, clique em OK até fechar a janela de propriedades do link dinâmico.



Em propriedades da seção desmarque Contrair, depois clique em Formatar Seção e selecione  a posição da borda como Nenhum.


Salve seu painel e execute  para verificar o resultado.

Na próxima etapa será necessário fazer modificações em arquivos no caminho de instalação no servidor do OBIEE. Como havia dito no inicio desse artigo alguns caminhos podem estar diferentes no seu servidor, então tente encontrar o que se assemelha mais.

Modificar o arquivo “header.js” nos caminhos a seguir:

·        /app/oracle/biee/Oracle_BI1/bifoundation/web/appv2/res/b_mozilla/header.js
·        /app/oracle/biee/user_projects/domains/bifoundation_domain/servers/bi_server1/tmp/_WL_user/analytics_11.1.1/7dezjl/war/res/b_mozilla/header.js

Procure a linha a seguir nos dois arquivos:

b.push(new obips.ContextMenu.MenuOption(saw.header.getLocalizedString("kmsgHeaderMyAccount"),"",null,new obips.Callback(this,this.onMyAccount)));

Cole a seguinte linha logo após a linha acima:

b.push(new obips.ContextMenu.MenuOption(saw.header.getLocalizedString("kmsgHeaderCustomURL"),"",null,new obips.Callback(this,this.onCustomURL)));

Procure a linha:

saw.header.NavBar.prototype.onMyAccount=function(){saw.header.Menubar.getManager().hidePopupPanel();var a=new saw.ondemandload.FuncProxy("obips.AccountInfo.launchDialog",{messageTemplate:"kuiMyAccountDialogHead"});a.exec()};

Cole a seguinte linha logo após a linha acima:

saw.header.NavBar.prototype.onCustomURL=function(){saw.header.Menubar.getManager().hidePopupPanel();obips.launcher.launchNewWindow("http://SEUHOST:PORTA/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FConta%20do%20Usuario%2F_portal%2FConfigurar%20Senha&page=page%201","_blank");};

Obs: Lembre de substituir a parte destacada com os seus dados

Acrescentar no arquivo:

·        /app/oracle/biee/Oracle_BI1/bifoundation/web/msgdb/common/saw.header.xml  

A seguinte linha:

Criar o caminho e o arquivo:

·        /app/oracle/biee/Oracle_BI1/instances/instance1/bifoundation/OracleBIPresentationServicesComponent/coreapplication_obips1/msgdb/l_en/customMessages/uicmsgs/saw.header.xml


E copie o seguinte conteúdo para o arquivo:
 
Alterar Senha
 



Reinicie o servidor do OBIEE. Entre no Portal, clique em cima do nome do usuário. Verifique que tem um novo link "Alterar Senha", clique e veja o resultado.
Caso não apareça aperte Ctrl+F5 para limpar o cache do navegador.

Se tudo correu corretamente uma nova aba do navegador será aberta com o nosso painel.




Clique no link "Alterar Senha". Crie um usuário de teste e faça o procedimento de troca de senha para verificar se está funcionando corretamente.


Agora pra finalizar vá em Catálogo na Pastas Compartilhadas, clique em Mais ->Propriedades na pasta Conta do Usuario e marque como Oculto, assim nenhum usuário poderá modificar.



Conclusão

A configuração de acesso ao ambiente de Business Intelligence é um elemento importante por se tratar de um ambiente que fornece informações estratégicas para as empresas, muitas vezes a confidencialidade de acesso torna-se essencial para os seus usuários. Pensando em uma empresa que fornece a solução para diversos clientes (Outras empresas), esse cenário passa a ser ainda mais complexo, por que o tratamento com o usuário rompe a fronteira da sua empresa, assim causando um grande desconforto para a equipe responsável por esse trabalho.

Assim a solução apresentada tem o objetivo de solucionar esse problema, possibilitando ao usuário, que o mesmo possa gerenciar sua senha de acesso ao portal, garantindo uma maior confiabilidade no seu acesso.

Referências
·      http://adventuresinobiee.blogspot.com.br/2013/02/configure-change-password-for-weblogic.html
·      http://www.rittmanmead.com/2011/10/changing-your-password-in-obiee-11g
·      http://obieesagar.blogspot.com.br/2013/03/resetting-bisytemuser-password-in-obiee.html
·      http://obinsight.blogspot.com.br/2013/11/configure-change-password-for-users-in.html
·      https://shivabizint.wordpress.com/2012/10/15/how-to-reset-the-lost-weblogic-admin-user-password








Compatilhe no Google Plus

Sobre Grimaldo Oliveira

Mestre pela Universidade do Estado da Bahia (UNEB) no Curso de Mestrado Profissional Gestão e Tecnologias Aplicadas à Educação (GESTEC) com o projeto “GESMOODLE – Ferramenta de acompanhamento do aluno de graduação, no ambiente virtual de aprendizagem(MOODLE), no contexto da UNEB“. Possui também Especialização em Análise de Sistemas pela Faculdade Visconde de Cairu e Bacharelado em Estatística pela Universidade Federal da Bahia. Atua profissionalmente como consultor há mais de 15 anos nas áreas de Data Warehouse, Mineração de Dados, Ferramentas de Tomada de Decisão e Estatística. Atualmente é editor do blog BI com Vatapá. Livro: BI COMO DEVE SER - www.bicomodeveser.com.br

1 comentários:

Anônimo disse...

No trecho que pede para configurar o arquivo saw.header.xml, acho que ficou faltando informação.