同一主机多WebLogic 12实例控制台登录Cookie冲突及离线WLST配置咨询
绝对可以解决这个问题!我本地搭多个WebLogic 12实例做测试时,也踩过这个Cookie覆盖的坑——默认情况下所有管理控制台的会话Cookie(比如JSESSIONID)参数完全一致,浏览器分不清是哪个实例的,切换控制台就会冲掉之前的会话,必须重新登录。下面给你详细讲两种解决思路,包括用离线WLST批量配置的方法:
一、通过配置Cookie策略避免冲突的核心方法
要解决Cookie覆盖,核心是让每个实例的管理控制台会话Cookie具有唯一性,最直接有效的方式是修改每个实例的控制台Cookie名称,具体操作有两种途径:
1. 在线控制台手动配置
针对每个WebLogic实例,登录其管理控制台后:
- 左侧导航栏进入「域结构」→「部署」
- 找到名为
console的部署(也就是管理控制台应用),点击进入 - 切换到「设置」标签页,找到「会话」配置区域
- 在「Cookie名称」字段中输入唯一的名称,比如
JSESSIONID_INSTANCE01、JSESSIONID_INSTANCE02 - 保存配置后,重启该WebLogic实例
2. 修改web.xml配置文件
如果不想登录控制台,也可以直接修改每个域下的控制台应用配置文件:
- 找到域路径下的
console/WEB-INF/web.xml文件 - 在
<session-config>节点下添加<cookie-name>标签,设置唯一的Cookie名称:<session-config> <cookie-name>JSESSIONID_INSTANCE01</cookie-name> <!-- 其他原有配置保持不变 --> </session-config> - 修改完成后重启实例即可生效
二、用离线模式WLST实现批量配置
如果要同时配置多个实例,手动操作太麻烦,用离线WLST脚本可以批量完成,不需要连接运行中的服务器,直接修改域的配置文件:
1. 编写WLST脚本
创建一个名为update_console_cookies.py的脚本,内容如下:
# 处理第一个WebLogic域 readDomain('/opt/oracle/domains/instance01_domain') cd('AppDeployments/console') # 设置唯一的Cookie名称 set('SessionCookieName', 'JSESSIONID_INSTANCE01') updateDomain() closeDomain() # 处理第二个WebLogic域 readDomain('/opt/oracle/domains/instance02_domain') cd('AppDeployments/console') set('SessionCookieName', 'JSESSIONID_INSTANCE02') updateDomain() closeDomain() # 处理第三个WebLogic域 readDomain('/opt/oracle/domains/instance03_domain') cd('AppDeployments/console') set('SessionCookieName', 'JSESSIONID_INSTANCE03') updateDomain() closeDomain() exit()
注意:替换脚本中的域路径为你实际的三个WebLogic域的本地路径,Cookie名称要确保每个实例唯一。
2. 执行WLST脚本
打开终端,切换到WebLogic的WLST目录,执行脚本:
$ORACLE_HOME/oracle_common/common/bin/wlst.sh update_console_cookies.py
(Windows环境下用wlst.cmd代替wlst.sh)
3. 生效步骤
脚本执行完成后,分别重启三个WebLogic实例,新的Cookie配置就会生效。
这样配置后,每个实例的管理控制台会使用独立的会话Cookie,浏览器会分别存储不同实例的Cookie,切换控制台时就不会互相覆盖,无需重新认证了。
内容的提问来源于stack exchange,提问作者Tuomas Toivonen
相关产品推荐
相关产品推荐

