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.
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:
|
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
propriedades da seção desmarque Contrair,
depois clique em Formatar Seção e
selecione a posição da borda como Nenhum.
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.
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
1 comentários:
No trecho que pede para configurar o arquivo saw.header.xml, acho que ficou faltando informação.
Postar um comentário