userconfig与userkey理解与应用

为什么需要userconfig与userkey?

举例来说:如果我们想让某人去执行编写一些WLST管理脚本,但又不想告诉对方管理员与用户名密码,如何实现呢?再比如,我们想写一些自动执行的WLST脚本,不想在执行过程中弹出题示框让用户输入用户名与密码,同时又不想把用户名与密码写死在脚本中,又如何实现?所有这些就需要用到userconfig与userkey,简单来说userconfig文件就代表用户名,而userkey文件则代表密码,当需要用户认证时,只要出示这两个文件即可。

如何生成userconfig与userkey?

1.  进入目录WL_HOME/common/bin

2. 执行wlst.cmd/sh

3. 连接到Admin Server

connect( username, password, url )

4. 执行命令生成userconfig与userkey文件

storeUserConfig(‘<userConfigFile>’, <userKeyFile>’)

例如:

storeUserConfig(‘C:/myFiles/myuserconfigfile.secure’, ‘C:/myFiles/myuserkeyfile.secure’)

这样,我们就得到了userconfig与userkey文件

如何使用userconfig与userkey?

userconfig与userkey一般是用在WLS脚本中,例如:

connect(userConfigFile=’C:/bea922/user_projects/domains/config-file’,userKeyFile=’C:/bea922/user_projects/domains/keyfile’,url=’t3://10.10.71.79:7001′)

nmConnect(userConfigFile=’C:/bea922/user_projects/domains/config-file’,userKeyFile=’C:/bea922/user_projects/domains/keyfile’, host=’10.10.71.79′, port=’5556′, domainName=’SAML_SOURCE’, domainDir=’C:/bea922/user_projects/domains/SAML_SOURCE’, nmType=’plain’)

如何通过userconfig与userkey文件反解析出用户名与密码?

样例Java代码:

import weblogic.security.UserConfigFileManager;
import weblogic.security.UsernameAndPassword;
public class SecureReader {
	public static void main( String[] args ) {
		UsernameAndPassword usernameAndPassword = UserConfigFileManager.getUsernameAndPassword( "d:/myuserconfigfile.secure", "d:/myuserkeyfile.secure", "weblogic.management" );
		String username = new String( usernameAndPassword.getUsername() );
		String password = new String( usernameAndPassword.getPassword() );
		System.out.println( "Username=" + username + ", Password=" + password );
	}
}

编译执行:

D:\>javac -classpath S:\fmw\wlserver_10.3\server\lib\weblogic.jar SecureReader.java

D:\>java -classpath S:\fmw\wlserver_10.3\server\lib\weblogic.jar;. SecureReader
Username=weblogic, Password=welcome1

(完)

将WebLogic Server注册为Windows服务

管理服务器注册

执行如下脚本,这里以我笔记本上的配置为例:

SETLOCAL

set DOMAIN_NAME=base_domain

set USERDOMAIN_HOME=S:\fmw\user_projects\domains\base_domain

set SERVER_NAME=AdminServer

set WL_HOME=s:\fmw\wlserver_10.3

set WLS_USER=weblogic

set WLS_PW=welcome1

set PRODUCTION_MODE=true

set MAX_CONNECT_RETRIES=5

set HOST=gniu_cn

set PORT=7001

set MEM_ARGS=-Xms512m –Xmx512m

call “%WL_HOME%\server\bin\installSvc.cmd”

ENDLOCAL

如果需要,还可以指定:JAVA_OPTIONS与JAVA_VM,这里就不详细解释了。这里需要解释下MAX_CONNECT_RETRIES,这个参数指的是Windows尝试通过HOST与PORT检查WLS状态的次数。

实管理服务器注册

被管理服务器所需的脚本和上面的类似,只是需要多加一个环境变量:

set ADMIN_URL=protocol://listen-address:listen-port

当然,如果想定制日志参数也可以如下更改加入JAVA_OPTIONS:

set JAVA_OPTIONS=-Dweblogic.Stdout=”d:\Oracle\Middleware\user_projects\domains\myWLSdomain\
stdout.txt” -Dweblogic.Stderr=”d:\Oracle\Middleware\user_projects\domains\myWLSdomain\
stderr.txt”

管理服务器与被管理服务器同时注册

如果管理服务器与被管理服务器在同一台物理服务器上,这就需要注册以下两个问题:

  • 启动顺序,一定是管理服务器先启动,然后是被管理服务器
  • 启动延时,管理服务器启动后需要有个延时来实现状态转移。

打开%WL_HOME%\server\bin\installSvc.cmd,

对于管理服务器,需要提定启动延时,即需要多长时间管理服务器进入STARTED状态,通过参数:

-delay:120000,即2分钟

对于被管理服务器,需要指定依赖关系,通过参数:

-depend:Administration-Server-service-name

当然,这里需要注意的是由于两个参数都是加在同一个文件中,因此,要么分开操作,要么写两个脚本完成。

测试注册服务

当我们注册服务成功后,我们也可以通过以下命令测试服务是否正常工作:

%WL_HOME/server/bin/beasvc –debug  “yourServiceName”

删除注册服务

执行如下脚本:

echo off
SETLOCAL
set DOMAIN_NAME=myWLSdomain
set SERVER_NAME=myWLSserver
call “D:\Oracle\Middleware\wlserver_10.3\server\bin\uninstallSvc.cmd”
ENDLOCAL

当然也可以用Windows命令来删除:

sc delete “yourServiceName”

(完)