WebLogic 脚本工具

     上一页  下一页    在新窗口中打开目录     
在此处开始内容

WebLogic Server 管理任务自动化

可以使用 WebLogic 脚本工具 (WLST) 自动创建并管理 WebLogic Server 域、服务器和资源。WLST 提供的命令能够创建、获取并设置配置 Mbean 的值,调用配置 Mbean 操作,删除配置 Mbean 实例;WLST 还提供获取值并调用运行时 Mbean 操作的命令。下列部分描述联机使用 WLST 命令使典型的域和服务器配置任务自动化:

也可以使用下面的一种技术自动配置 WebLogic Server 域:

 


创建示例域:主要步骤

创建和配置示例域的脚本部分提供了一个用于创建已修改 MedRec 域的示例脚本。该脚本在当前目录下新建目录 MedRecDomain,创建并启动管理服务器。WLST 连接到该服务器,并创建 MedRec 域的修改版本。

该示例脚本将执行以下操作:

  1. 在当前目录下新建目录 MedRecDomain
  2. 创建并启动管理服务器。请参阅创建域
  3. 在域的管理服务器完成其启动周期之后,将 WLST 连接到该服务器,并为域配置资源。请参阅:
  4. 调用多个 WLST deploy 命令,部署 J2EE 模块(例如 EJB 和企业应用程序)。请参阅部署应用程序

设置环境

所有的 WebLogic Server 命令要求在环境的 PATH 变量中指定 SDK 以及在 CLASSPATH 变量中指定一组 WebLogic Server 类。

使用以下脚本将 SDK 添加到变量 PATH 以及将 WebLogic Server 类添加到变量 CLASSPATH

WL_HOME\server\bin\setWLSEnv.cmd (Windows 环境中)
WL_HOME/server/bin/setWLSEnv.sh (UNIX环境中)

其中,WL_HOME 指的是 WebLogic Server 的顶级安装目录。

如果要使用 JDBC 资源连接到数据库,请按照数据库供应商的需求对环境进行修改。一般的做法是将驱动程序类添加到 CLASSPATH 变量,将特定供应商目录添加到 PATH 变量。要设置示例 PointBase 数据库所需要的环境,并将 SDK 添加到 PATH 变量以及将 WebLogic Server 类添加到 CLASSPATH 变量,请调用以下脚本:

WL_HOME\samples\domains\wl_server\setExamplesEnv.cmd(Windows 环境中)
WL_HOME/samples/domains/wl_server/setExamplesEnv.sh(UNIX 环境中)

创建

清单 6-1 中的命令用于创建名为 MedRecDomain 的域,将监听端口 8001 的管理服务器命名为 medrec-adminServer,以及将 WLST 连接到服务器实例。

清单 6-1 创建域
from java.io import File
domainDir = File("MedRecDomain")
bool = domainDir.mkdir()
if bool==1:
  print 'Successfully created a new Directory'
else:
  if domainDir.delete()==1:
    domainDir.mkdir()
    print 'Successfully created a new Directory'
  else:
    print 'Could not create new directory, dir already exists'
    stopExecution("cannot create a new directory")
debug()
dsname="myJDBCDataSource"
adminServerName="medrec-adminServer"
domainName="MedRecDomain"
_url="t3://localhost:8001"
uname="weblogic"
pwd="weblogic"
startServer(adminServerName,domainName,_url,domainDir=domainDir.getPath(),
block="true")
connect(uname, pwd, _url)
edit()
startEdit()
注意: 该命令用于指定监听端口 8001,因为 WebLogic Server 安装的示例 MedRec 域监听默认端口 7011。如果示例 MedRec 域正在运行,那么另一个服务器实例就不能使用监听端口 7011。

创建 JDBC 资源

清单 6-2 中的命令用于为 MedRecDomain 创建和配置 JDBC 系统资源。

清单 6-2 创建 JDBC 系统资源
dsname="myJDBCDataSource"
# 创建和配置 JDBC 系统资源
print 'Creating JDBCSystemResource with name '+dsname
jdbcSR = create(dsname,"JDBCSystemResource")
theJDBCResource = jdbcSR.getJDBCResource()
theJDBCResource.setName("myJDBCDataSource")
connectionPoolParams = theJDBCResource.getJDBCConnectionPoolParams()
connectionPoolParams.setConnectionReserveTimeoutSeconds(25)
connectionPoolParams.setMaxCapacity(100)
connectionPoolParams.setTestTableName("SYSTABLES")
dsParams = theJDBCResource.getJDBCDataSourceParams()
dsParams.addJNDIName("ds.myJDBCDataSource")
driverParams = theJDBCResource.getJDBCDriverParams()
driverParams.setUrl("jdbc:pointbase:server://localhost/demo")
driverParams.setDriverName("com.pointbase.xa.xaDataSource")
#driverParams.setUrl("jdbc:oracle:thin:@my-oracle-server:my-oracle-server-port:my-oracle-sid")
#driverParams.setDriverName("oracle.jdbc.driver.OracleDriver")
driverParams.setPassword("examples")
#driverParams.setLoginDelaySeconds(60)
driverProperties = driverParams.getProperties()
proper = driverProperties.createProperty("user")
#proper.setName("user")
proper.setValue("examples")
proper1 = driverProperties.createProperty("DatabaseName")
#proper1.setName("DatabaseName")
proper1.setValue("jdbc:pointbase:server://localhost/demo")

创建 JMS 资源

清单 6-3 中的命令用于在 MedRecDomain 中创建 JMS 系统资源。

清单 6-3 创建 JMS 系统资源
# 创建 JMS 系统资源
jmsSystemResource = create("medrec-jms-resource","JMSSystemResource")
theJMSResource = jmsSystemResource.getJMSResource()
# 创建 JMS 连接工厂
mrqFactory = theJMSResource.createConnectionFactory("MedRecQueueFactory")
mrqFactory.setJNDIName("jms/MedRecQueueConnectionFactory")
# 创建和配置 JMS JDBC 存储
mrjStore = create("MedRecJMSJDBCStore","JDBCStore")
mrjStore.setDataSource(jdbcSR)
mrjStore.setPrefixName("MedRec")
# 创建和配置 JMS 服务器
mrJMSServer = create("MedRecJMSServer","JMSServer")
mrJMSServer.setStore(mrjStore)
# 创建和配置一个队列
regQueue = theJMSResource.createQueue("RegistrationQueue")
regQueue.setJNDIName("jms/REGISTRATION_MDB_QUEUE")
# 创建和配置另一个队列
mailQueue = theJMSResource.createQueue("MailQueue")
mailQueue.setJNDIName("jms/MAIL_MDB_QUEUE")

请参阅“配置和管理 WebLogic JMS”中的使用 WLST 管理 JMS 服务器和 JMS 系统模块资源

创建邮件资源

清单 6-4 中的命令用于通过创建和配置 MailSessionMBean 将电子邮件功能添加到 MedRecDomain 中的示例应用程序中。

清单 6-4 创建邮件资源
# 创建邮件资源
mrMailSession = create("MedicalRecordsMailSession","MailSession")
mrMailSession.setJNDIName("mail/MedRecMailSession")
mrMailSession.setProperties(makePropertiesObject("mail.user=joe;mail.host=mail.mycompany.com"))

要查看 MailSessionMBean 的所有特性和有效值,请参阅“WebLogic Server MBean Reference”中的 MailSessionMBean。有关 WebLogic Server 邮件服务的详细信息,请参阅“管理控制台联机帮助”中的配置对 JavaMail 的访问

部署应用程序

清单 6-5 中的命令用于在 MedRecDomain 中部署示例应用程序。

清单 6-5 部署应用程序
# 部署应用程序
deploy("PhysicianEAR","C:/bea/weblogic92/samples/server/medrec/src/physicianEar","medrec-adminServer",securityModel="Advanced",block="true")
deploy("StartupEAR","C:/bea/weblogic92/samples/server/medrec/src/startupEar","medrec-adminServer",securityModel="Advanced",block="true")
deploy("MedRecEAR","C:/bea/weblogic92/samples/server/medrec/src/medrecEAR","medrec-adminServer",securityModel="Advanced",block="true")

注意:

有关使用 WLST 部署应用程序的详细信息,请参阅“将应用程序部署到 WebLogic Server”中的部署工具概述

创建和配置示例域的脚本

清单 6-6 提供的示例脚本用于创建已修改的 MedRec 域。您可以将该脚本用作创建和配置典型的 WebLogic Server 域的模板。

注意: 该示例脚本使用安装有 WebLogic Server 的演示 PointBase 服务器。在运行该脚本之前,您应该通过发出以下命令之一来启动 PointBase 服务器:
注意: Windows:WL_HOME\common\eval\pointbase\tools\startPointBase.cmd
注意: UNIX:WL_HOME/common/eval/pointbase/tools/startPointBase.sh

要创建和配置域(例如 MedRec 示例域),请执行下列操作:

  1. 在带有 .py 文件扩展名的文本文件的清单 6-6 中,复制并保存命令。例如 cloneDomain.py
  2. 设置所需的环境变量。请参阅设置环境
  3. 使用 WL_HOME\samples\domains\wl_server\setExamplesEnv.cmd 设置运行该脚本所需的变量。

  4. 通过输入以下命令调用 WLST 并运行示例脚本:
  5. java weblogic.WLST <filepath>/cloneDomain.py

    有关如何运行该脚本的详细信息,请参阅运行脚本

    清单 6-6 cloneDomain.py
    from java.io import File
    domainDir = File("MedRecDomain")
    bool = domainDir.mkdir()
    if bool==1:
      print 'Successfully created a new Directory'
    else:
      if domainDir.delete()==1:
        domainDir.mkdir()
        print 'Successfully created a new Directory'
      else:
        print 'Could not create new directory, dir already exists'
        stopExecution("cannot create a new directory")
    debug()
    dsname="myJDBCDataSource"
    adminServerName="medrec-adminServer"
    domainName="MedRecDomain"
    _url="t3://localhost:8001"
    uname="weblogic"
    pwd="weblogic"
    startServer(adminServerName,domainName,_url,domainDir=domainDir.getPath(),
    block="true")
    connect(uname, pwd, _url)
    edit()
    startEdit()
    # 创建和配置 JDBC 系统资源
    print 'Creating JDBCSystemResource with name '+dsname
    jdbcSR = create(dsname,"JDBCSystemResource")
    theJDBCResource = jdbcSR.getJDBCResource()
    theJDBCResource.setName("myJDBCDataSource")
    connectionPoolParams = theJDBCResource.getJDBCConnectionPoolParams()
    connectionPoolParams.setConnectionReserveTimeoutSeconds(25)
    connectionPoolParams.setMaxCapacity(100)
    connectionPoolParams.setTestTableName("SYSTABLES")
    dsParams = theJDBCResource.getJDBCDataSourceParams()
    dsParams.addJNDIName("ds.myJDBCDataSource")
    driverParams = theJDBCResource.getJDBCDriverParams()
    driverParams.setUrl("jdbc:pointbase:server://localhost/demo")
    driverParams.setDriverName("com.pointbase.xa.xaDataSource")
    #driverParams.setUrl("jdbc:oracle:thin:@my-oracle-server:my-oracle-server-port:my-oracle-sid")
    #driverParams.setDriverName("oracle.jdbc.driver.OracleDriver")
    driverParams.setPassword("examples")
    #driverParams.setLoginDelaySeconds(60)
    driverProperties = driverParams.getProperties()
    proper = driverProperties.createProperty("user")
    #proper.setName("user")
    proper.setValue("examples")
    proper1 = driverProperties.createProperty("DatabaseName")
    #proper1.setName("DatabaseName")
    proper1.setValue("jdbc:pointbase:server://localhost/demo")
    # 创建 JMS 系统资源
    jmsSystemResource = create("medrec-jms-resource","JMSSystemResource")
    theJMSResource = jmsSystemResource.getJMSResource()
    # 创建 JMS 连接工厂
    mrqFactory = theJMSResource.createConnectionFactory("MedRecQueueFactory")
    mrqFactory.setJNDIName("jms/MedRecQueueConnectionFactory")
    # 创建和配置 JMS JDBC 存储
    mrjStore = create("MedRecJMSJDBCStore","JDBCStore")
    mrjStore.setDataSource(jdbcSR)
    mrjStore.setPrefixName("MedRec")
    # 创建和配置 JMS 服务器
    mrJMSServer = create("MedRecJMSServer","JMSServer")
    mrJMSServer.setPersistentStore(mrjStore)
    # 创建和配置一个队列
    regQueue = theJMSResource.createQueue("RegistrationQueue")
    regQueue.setJNDIName("jms/REGISTRATION_MDB_QUEUE")
    # 创建和配置另一个队列
    mailQueue = theJMSResource.createQueue("MailQueue")
    mailQueue.setJNDIName("jms/MAIL_MDB_QUEUE")
    # 创建邮件资源
    mrMailSession = create("MedicalRecordsMailSession","MailSession")
    mrMailSession.setJNDIName("mail/MedRecMailSession")
    mrMailSession.setProperties(makePropertiesObject("mail.user=joe;mail.host=mail.mycompany.com"))
    # 获取和配置服务器目标
    tgt = getMBean("/Servers/medrec-adminServer")
    tgt.setJavaCompiler("javac")
    tgt.setListenAddress("localhost")
    tgt.setListenPort(8001)
    #tgt.setIIOPEnabled(0)
    tgt.setInstrumentStackTraceEnabled(1)
    ssl = tgt.getSSL()
    ssl.setEnabled(1)
    ssl.setIdentityAndTrustLocations("KeyStores")
    ssl.setListenPort(9992)
    # 将资源定位到 medrec 管理服务器
    jdbcSR.addTarget(tgt)
    jmsSystemResource.addTarget(tgt)
    mrjStore.addTarget(tgt)
    mrJMSServer.addTarget(tgt)
    mrMailSession.addTarget(tgt)
    save()
    activate(block="true")
    shutdown(force="true",block="true")
    print 'end of the script ... '

 


监视域运行时信息

WebLogic Server 包含大量 Mbean,这些 Mbean 可提供有关其资源运行时状态的信息。域中的每个服务器实例仅仅承载配置和监视自己资源集的 MBean。然而,在管理服务器中,域范围服务的 Mbean 却在根为 DomainRuntimeMBean 的一个层次中。域运行时 Mbean 层次不仅提供对面向域范围服务(例如应用程序部署、JMS 服务器和 JDBC 连接缓冲池)的 Mbean 访问,而且提供对该域中任何服务器上的任何运行时 Mbean 访问。

访问域运行时信息:主要步骤

访问域运行时信息包括下列主要步骤:

  1. 调用 WLST 并连接到正在运行的管理服务器实例。请参阅调用 WLST
  2. 通过输入 domainRuntime 命令,导航至域运行时 Mbean 层次。
  3. wls:/mydomain/serverConfig>domainRuntime()

    domainRuntime 命令用于将 WLST 放置到域范围运行时管理对象的根 DomainRuntimeMBean

  4. 导航至 ServerRuntimes,然后导航至您有兴趣监视的服务器实例。
  5. wls:/mydomain/domainRuntime>cd('ServerRuntimes/myserver')

  6. 在该服务器实例,导航至运行时 Mbean,并询问运行时 Mbean。
  7. wls:/mydomain/domainRuntime/ServerRuntimes/myserver>cd('JVMRuntime/myserver')>
    wls:/mydomain/domainRuntime/ServerRuntimes/myserver/JVMRuntime/myserver>
    ls()

    -r--   AllProcessorsAverageLoad                     0.0
    -r-- Concurrent true
    -r-- FreeHeap 15050064
    -r-- FreePhysicalMemory 900702208
    -r-- GCHandlesCompaction true
    -r-- GcAlgorithm Dynamic GC currently running
    strategy: Nursery, parallel mark, parallel sweep
    -r-- Generational true
    -r-- HeapFreeCurrent 14742864
    -r-- HeapFreePercent 5
    -r-- HeapSizeCurrent 268435456
    -r-- HeapSizeMax 268435456
    -r-- Incremental false
    -r-- JVMDescription BEA JRockit Java Virtual Machine
    -r-- JavaVMVendor BEA Systems, Inc.
    -r-- JavaVendor BEA Systems, Inc.
    -r-- JavaVersion 1.5.0
    ...

下列部分提供的示例脚本用于检索有关 WebLogic Server 服务器实例和域资源的运行时信息。

监视服务器状态的脚本

清单 6-7 中的 WLST 联机版脚本将每 5 秒检查一次受管服务器的状态,如果该服务器状态从 RUNNING 更改为其他状态,则重新启动该服务器。

有关如何运行该脚本的信息,请参阅运行脚本

清单 6-7 监视服务器状态
# 必须运行节点管理器,才能运行此脚本。
import thread
import time
def checkHealth(serverName):
  while 1:
    slBean = getSLCRT(serverName)
    status = slBean.getState()
    print 'Status of Managed Server is '+status
    if status != "RUNNING":
      print 'Starting server '+serverName
      start(serverName, block="true")
    time.sleep(5)
def getSLCRT(svrName):
    domainRuntime()
    slrBean = cmo.lookupServerLifecycleRuntime(svrName)
    return slcBean

监视 JVM 的脚本

清单 6-8 中的 WLST 联机版脚本为域中正在运行的所有服务器监视 HJVMHeapSize;它还每 3 分钟检查一次堆的大小,如果堆大小大于指定的阈值,则打印警告。

有关如何运行该脚本的信息,请参阅运行脚本

清单 6-8 监视 JVM 堆大小
waitTime=300000
THRESHOLD=100000000
uname = "weblogic"
pwd = "weblogic"
url = "t3://localhost:7001"
def monitorJVMHeapSize():
    connect(uname, pwd, url)
    while 1:
        serverNames = getRunningServerNames()
        domainRuntime()
        for name in serverNames:
            print 'Now checking '+name.getName()
            try:
           cd("/ServerRuntimes/"+name.getName()+"/JVMRuntime/"+name.getName())
            except WLSTException,e:
                # 通常意味着尚未启动服务器,忽略即可
                pass
            heapSize = cmo.getHeapSizeCurrent()
            if heapSize > THRESHOLD:
            # 根据需要执行任何所需操作,例如发送警报、发送电子邮件等
                print 'WARNING: The HEAPSIZE is Greater than the Threshold'
            else:
                print heapSize
        java.lang.Thread.sleep(1800000)
def getRunningServerNames():
    domainConfig()
    return cmo.getServers()
if __name__== "main":
    monitorJVMHeapSize()

 


安全管理

WebLogic Security Service 中的身份验证提供程序就是识别用户或者系统进程身份的软件组件。身份验证提供程序还记忆、传输标识信息,在需要时向系统的各种组件提供标识信息。安全领域可以使用不同类型的身份验证提供程序管理不同的用户集和组集。请参阅“开发 WebLogic Server 的安全提供程序”中的身份验证提供程序

可使用 WLST 调用与下列类型身份验证提供程序有关的操作:

注意: 使用 Edit Mbean 服务器修改安全 MBean 特性;使用运行时 MBean 服务器或者域运行时 MBean 服务器调用安全提供程序 Mbean 操作。如果编辑正在进行中,或者由于您已修改了安全 Mbean 特性,因此需要重新引导该服务器时,则您不能调用这些操作。
注意: 有关详细信息,请参阅“使用 JMX 开发自定义管理实用工具”中的选择一个 MBean 服务器以管理安全领域

下列部分描述使用 WLST 管理用户和组的基本任务:

有关 AuthenticationProvider 和可选 MBean 支持的其他任务的信息,请参阅“WebLogic Server MBean Reference”中的 weblogic.management.security.authentication 包。

注意: WebLogic Server 6.0 样式安全 Mbean 使用 WLST 是可访问的,但是使用 ls 命令却显示不出来。例如,如果您输入以下命令,则 WLST 列出域 Mbean,但是不列出排除的特性(比如 FileRealm):
注意: java weblogic.WLST
connect()
ls()
注意: 然而,如果您输入以下命令,则 WLST 显示 DomainMBean 的文件领域:
注意: java weblogic.WLST
connect()
cmo.getFileRealms()

创建用户

要创建用户,请调用由安全领域的 AuthenticationProvider Mbean 扩展的 UserEditorMBean.createUser 方法。有关详细信息,请查阅“WebLogic Server MBean Reference”中的 createUser 方法。

该方法需要输入三个参数:

username password user-description

以下 WLST 联机版脚本在默认的身份验证提供程序中调用 createUser。有关如何运行该脚本的信息,请参阅运行脚本

清单 6-9 创建用户
from weblogic.management.security.authentication import UserEditorMBean
print "Creating a user ..."
atnr=cmo.getSecurityConfiguration().getDefaultRealm().lookupAuthenticationProvider("DefaultAuthenticator")
atnr.createUser('my_user','my_password','new_admin')
print "Created user successfully"

将用户添加到组

要将用户添加到组,请调用由安全领域的 AuthenticationProvider Mbean 扩展的 GroupEditorMBean.addMemberToGroup 方法。有关详细信息,请参阅“WebLogic Server MBean Reference”中的 addMemberToGroup 方法。

该方法需要输入两个参数:

groupname username

以下 WLST 联机版脚本在默认的身份验证提供程序中调用 addMemberToGroup。有关如何运行该脚本的信息,请参阅运行脚本

清单 6-10 将用户添加到组
from weblogic.management.security.authentication import GroupEditorMBean
print "Adding a user ..."
atnr=cmo.getSecurityConfiguration().getDefaultRealm().lookupAuthenticationProvider("DefaultAuthenticator")
atnr.addMemberToGroup('Administrators','my_user')
print "Done adding a user"

验证用户是否是组的成员

要验证某个用户是否是组中的成员,请调用由安全领域的 AuthenticationProvider Mbean 扩展的 GroupEditorMBean.isMember 方法。有关详细信息,请参阅“WebLogic Server MBean Reference”中的 isMember 方法。

该方法需要输入三个参数:

groupname username boolean

其中,boolean 指定该命令是否搜索子组。如果您指定 true,并且该成员属于您指定的组或者属于该组中包含的任何组,则该命令返回 true

以下 WLST 联机版脚本在默认的身份验证提供程序中调用 isMember。有关如何运行该脚本的信息,请参阅运行脚本

清单 6-11 验证用户是否是组的成员
from weblogic.management.security.authentication import GroupEditorMBean
print "Checking if isMember of a group ..."
atnr=cmo.getSecurityConfiguration().getDefaultRealm().lookupAuthenticationProvider("DefaultAuthenticator")
if atnr.isMember('Administrators','my_user',true) == 0:
  print "my_user is not member of Administrators"
else:
  print "my_user is a member of Administrators"

列出用户所属的组

要查看包含用户或组的组列表,请调用由安全领域的 AuthenticationProvider Mbean 扩展的 MemberGroupListerMBean.listMemberGroups 方法。有关详细信息,请参阅“WebLogic Server MBean Reference”中的 listMemberGroups 方法。

该方法需要输入一个参数:

memberUserOrGroupName

其中,memberUserOrGroupName 指定现有用户或组的名称。

以下 WLST 联机版脚本在默认的身份验证提供程序中调用 listMemberGroups。有关如何运行该脚本的信息,请参阅运行脚本

清单 6-12 列出用户所属的组
from weblogic.management.security.authentication import MemberGroupListerMBean
print "Listing the member groups ..."
atnr=cmo.getSecurityConfiguration().getDefaultRealm().lookupAuthenticationProvider("DefaultAuthenticator")
x = atnr.listMemberGroups('my_user')
print x

该方法返回指向名称列表的游标。weblogic.management.utils.NameLister.haveCurrentgetCurrentNameadvance 方法重复处理整个返回的列表,并检索当前游标位置所指的名称。请参阅“WebLogic Server MBean Reference”中的 weblogic.management.utils.NameLister 接口。

列出安全领域中的用户和组

要查看用户名或组名列表,您可以调用一系列方法,所有这些方法可以通过 AuthenticationProvider 接口获得:

清单 6-13 中的 WLST 联机版脚本列出了某个领域中的所有用户以及这些用户所属的组。有关如何运行该脚本的信息,请参阅运行脚本

清单 6-13 列出用户和组
from weblogic.management.security.authentication import UserReaderMBean
from weblogic.management.security.authentication import GroupReaderMBean
realm=cmo.getSecurityConfiguration().getDefaultRealm()
atns = realm.getAuthenticationProviders()
for i in atns:
  if isinstance(i,UserReaderMBean):
    userReader = i
    cursor = i.listUsers("*",0)
    print 'Users in realm '+realm.getName()+' are: '
    while userReader.haveCurrent(cursor):
      print userReader.getCurrentName(cursor)
      userReader.advance(cursor)
    userReader.close(cursor)
for i in atns:
  if isinstance(i,GroupReaderMBean):
    groupReader = i
    cursor = i.listGroups("*",0)
    print 'Groups in realm are: '
    while groupReader.haveCurrent(cursor):
      print groupReader.getCurrentName(cursor)
      groupReader.advance(cursor)
    groupReader.close(cursor)

更改密码

要更改用户密码,请调用由安全领域的 AuthenticationProvider Mbean 扩展的 UserPasswordEditorMBean.changeUserPassword 方法。有关详细信息,请参阅“WebLogic Server MBean Reference”中的 changeUserPassword 方法。

以下 WLST 联机版脚本在默认的身份验证提供程序中调用 changeUserPassword:有关如何运行该脚本的信息,请参阅运行脚本

清单 6-14 更改密码
from weblogic.management.security.authentication import UserPasswordEditorMBean
print "Changing password ..."
atnr=cmo.getSecurityConfiguration().getDefaultRealm().lookupAuthenticationProvider("DefaultAuthenticator")
  atnr.changeUserPassword('my_user','my_password','new_password')
print "Changed password successfully"

保护安全领域中的用户帐户

WebLogic Server 提供的一组特性可以保护用户帐户免受入侵者攻击。默认情况下,这些特性设置为最高级别的保护。您可以降低用户帐户的保护级别。例如,您可以增加用户帐户锁定之前的登录尝试次数,延长锁定用户帐户之前无效登录的尝试时间,或者更改用户帐户锁定的时间。

AuthenticationProvider Mbean 并不扩展您用于保护用户帐户的方法,而是检索 UserLockoutManagerMBean 并调用其方法。有关详细信息,请参阅“WebLogic Server MBean Reference”中的 UserLockoutManagerMBean 接口。

下列任务提供了调用 UserLockoutManagerMBean 方法的示例:

设置连续无效登录尝试次数

以下 WLST 联机版脚本设置用户帐户被锁定之前连续无效登录尝试的次数。有关如何运行该脚本的信息,请参阅运行脚本

清单 6-15 设置连续无效登录尝试次数
from weblogic.management.security.authentication import UserLockoutManagerMBean
edit()
startEdit()
#有两种选择可用于获取要配置的用户锁定管理器
# 1 - 要配置默认领域的 UserLockoutManager:
ulm=cmo.getSecurityConfiguration().getDefaultRealm().getUserLockoutManager()
# 2 - 要配置另一领域的 UserLockoutManager:
#ulm=cmo.getSecurityConfiguration().lookupRealm("anotherRealm").getUserLockoutManager()
ulm.setLockoutThreshold(3)
save()
activate()
解除对用户帐户的锁定

以下 WLST 联机版脚本解除对用户帐户的锁定。有关如何运行该脚本的信息,请参阅运行脚本

清单 6-16 解除对用户帐户的锁定
from weblogic.management.security.authentication import UserLockoutManagerMBean
serverRuntime()
ulm=cmo.getServerSecurityRuntime().getDefaultRealmRuntime().getUserLockoutManagerRuntime()
#注意1:您只能管理引导服务器时所启动的默认领域(而不是其他非活动领域)中的用户锁定。
#注意2:如果默认领域的用户锁定管理器的 LockoutEnabled 特性为 false,则用户锁定管理器的运行时 MBean 将为空。
#也就是说,如是已启用默认领域中的用户锁定管理器,则您只能管理该领域中的用户锁定。
if ulm != None:
  ulm.clearLockout("myuser")

 


配置日志记录

您可以使用 WLST 配置服务器实例日志记录和消息输出。

要确定可以配置的日志特性,请参阅“WebLogic Server MBean Reference”中的 LogMBeanLogFileMBean。此参考还指出各个特性的有效值。

清单 6-17 中的 WLST 联机版脚本获取并设置几个 LogMBeanLogFileMBean 特性。有关如何运行该脚本的信息,请参阅运行脚本

清单 6-17 配置日志记录
from java.lang import Boolean
from java.lang import System
from java.lang import Integer
username = System.getProperty("user","weblogic")
password = System.getProperty("password","weblogic")
adminHost = System.getProperty("adminHost","localhost")
adminPort = System.getProperty("adminPort","7001")
protocol = System.getProperty("protocol","t3")
url = protocol+"://"+adminHost+":"+adminPort
fileCount = Integer.getInteger("fileCount", 5)
fileMinSize = Integer.getInteger("fileMinSize", 400)
fileName = System.getProperty("fileName","config\\mydomain\\myserver\\myserver.log")
fileTimeSpan = Integer.getInteger("fileTimeSpan", 12)
log4jEnabled = System.getProperty("log4jEnabled", "true")
stdoutSeverity = System.getProperty("stdoutSeverity", "Info")
logBRSeverity = System.getProperty("logBRSeverity", "Info")
logFileSeverity = System.getProperty("logFileSeverity", "Info")
memBufferSeverity = System.getProperty("memBufferSeverity", "Info")
memBufferSize = Integer.getInteger("memBufferSize", 400)
numOfFilesLimited = System.getProperty("numOfFilesLimited", "true")
redirectStdout = System.getProperty("redirectStdout", "true")
redirectStdErr = System.getProperty("redirectStdErr", "true")
rotateOnStartup = System.getProperty("rotateOnStartup", "false")
rotateTime = System.getProperty("rotateTime", "00:10")
rotateType = System.getProperty("rotateType", "byTime")
print "Connecting to " + url + " as [" + \
  username + "," + password + "]"
# 连接到服务器
connect(username,password,url)
edit()
startEdit()
# 将 CMO 设置为服务日志配置
cd("Servers/myserver/Log/myserver")
ls ()
# 更改 LogFileMBean 和 LogMBean 特性
print "Original FileCount is " + 'get("FileCount")'
print "Setting FileCount to be " + `fileCount`
set("FileCount", fileCount)
print "Original FileMinSize is " + 'get("FileMinSize")'
print "Setting FileMinSize to be " + 'fileMinSize'
set("FileMinSize", fileMinSize)
print "Original FileName is " + 'get("FileName")'
print "Setting FileName to be " + 'fileName'
set("FileName", fileName)
print "Original FileTimeSpan is " + 'get("FileTimeSpan")'
print "Setting FileTimeSpan to be " + 'fileTimeSpan'
set("FileTimeSpan", fileTimeSpan)
print "Original Log4jEnabled is " + 'get("Log4jLoggingEnabled")'
print "Setting Log4jLoggingEnabled to be " + 'log4jEnabled'
set("Log4jLoggingEnabled", log4jEnabled)
print "Original StdoutSeverity is " + 'get("StdoutSeverity")'
print "Setting StdoutSeverity to be " + 'stdoutSeverity'
set("StdoutSeverity", stdoutSeverity)
print "Original DomainLogBroadcastSeverity is " + `get("DomainLogBroadcastSeverity")`
print "Setting DomainLogBroadcastSeverity to be " + 'logBRSeverity'
set("DomainLogBroadcastSeverity", logBRSeverity)
print "Original LogFileSeverity is " + 'get("LogFileSeverity")'
print "Setting LogFileSeverity to be " + 'logFileSeverity'
set("LogFileSeverity", logFileSeverity)
print "Original MemoryBufferSeverity is " + 'get("MemoryBufferSeverity")'
print "Setting MemoryBufferSeverity to be " + 'memBufferSeverity'
set("MemoryBufferSeverity", memBufferSeverity)
print "Original MemoryBufferSize is " + 'get("MemoryBufferSize")'
print "Setting MemoryBufferSize to be " + 'memBufferSize'
set("MemoryBufferSize", memBufferSize)
print "Original NumberOfFilesLimited is " + 'get("NumberOfFilesLimited")'
print "Setting NumberOfFilesLimited to be " + 'numOfFilesLimited'
set("NumberOfFilesLimited", numOfFilesLimited)
print "Original RedirectStdoutToServerLogEnabled is " + 'get("RedirectStdoutToServerLogEnabled")'
print "Setting RedirectStdoutToServerLogEnabled to be " + 'redirectStdout'
set("RedirectStdoutToServerLogEnabled", redirectStdout)
print "Original RedirectStderrToServerLogEnabled is " + 'get("RedirectStderrToServerLogEnabled")'
print "Setting RedirectStderrToServerLogEnabled to be " + 'redirectStdErr'
set("RedirectStderrToServerLogEnabled", redirectStdErr)
print "Original RotateLogOnStartup is " + 'get("RotateLogOnStartup")'
print "Setting RotateLogOnStartup to be " + 'rotateOnStartup'
set("RotateLogOnStartup", rotateOnStartup)
print "Original RotationTime is " + 'get("RotationTime")'
print "Setting RotationTime to be " + 'rotateTime'
set("RotationTime", rotateTime)
print "Original RotationType is " + 'get("RotationType")'
print "Setting RotationType to be " + 'rotateType'
set("RotationType", rotateType)
save()
activate()
print
ls ()
# 全部完成...
exit()

有关说明使用 WLST 配置 WebLogic 诊断框架的示例脚本,请参阅“配置和使用 WebLogic 诊断框架”中的 WebLogic 脚本工具示例


  返回顶部       上一页  下一页