WebLogic迁JBoss EAP7.4后负载均衡URL下jsessionid出现在资源URL问题
1. 自定义会话Cookie名称的JBoss等效配置
原WebLogic通过weblogic.xml的<session-descriptor>配置自定义Cookie名MYSESSIONID,JBoss EAP 7.4的等效配置需在**jboss-web.xml**中完成,代码如下:
<jboss-web> <session-config> <cookie-config> <name>MYSESSIONID</name> <!-- 可选:如需对齐WebLogic的其他Cookie属性(路径、域、安全标识等),可补充配置 --> <!-- <path>/context</path> --> <!-- <domain>your-openshift-domain.com</domain> --> <!-- <secure>true</secure> --> </cookie-config> </session-config> </jboss-web>
这是问题的核心原因之一:WebLogic使用自定义Cookie名维护会话,迁移到JBoss后未同步配置的话,JBoss会默认使用JSESSIONID,导致DNS切换后会话识别异常,触发URL重写附加jsessionid的行为。
2. 解决URL自动附加jsessionid的问题
问题根源
直接访问Pod主机名时会话Cookie可正常传递;切换到Openshift DNS地址后,可能存在Cookie域/路径不匹配、前端Apache反向代理未正确传递会话Cookie的情况,导致JBoss判定客户端不支持Cookie,自动触发URL重写。
针对性方案
修复Apache反向代理的Cookie传递:
在Apache代理配置中添加头信息传递Cookie,确保ProxyPass和ProxyPassReverse配置正确:ProxyPass /context http://your-jboss-pod:8080/context ProxyPassReverse /context http://your-jboss-pod:8080/context RequestHeader set Cookie "%{Cookie}e" env=Cookie若为HTTPS访问,需将Cookie的
secure属性设为true,避免浏览器因安全策略拒绝传递Cookie。精细化配置JBoss会话跟踪:
之前直接在web.xml添加<tracking-mode>COOKIE</tracking-mode>破坏应用,大概率是原有代码依赖URL重写逻辑或Cookie配置不匹配。可在jboss-web.xml中做更细致的配置:<jboss-web> <session-config> <tracking-mode>COOKIE</tracking-mode> <!-- 按需禁用URL重写,若应用依赖URL重写则保留开启 --> <url-rewriting-enabled>false</url-rewriting-enabled> <cookie-config> <name>MYSESSIONID</name> <path>/context</path> <!-- 根据Openshift域名设置域,例如app.example.com --> <domain>example.com</domain> <secure>true</secure> <http-only>true</http-only> </cookie-config> </session-config> </jboss-web>Facelets页面的会话控制:
对于XHTML页面,无需关闭JSP会话,可在<f:view>标签中添加配置禁用URL重写:<f:view disableUrlRewriting="true"> <!-- 页面内容 --> </f:view>该配置会告知JSF不要在生成的链接中附加
jsessionid,前提是客户端支持Cookie且会话可正常传递。
3. 静态资源的额外处理
静态资源由Apache从/static-context提供,需确保该路径的请求不传递会话Cookie,避免静态资源URL被附加jsessionid,Apache配置示例:
<Location /static-context> ProxyPass http://your-static-server:8080/static-context ProxyPassReverse http://your-static-server:8080/static-context # 移除会话Cookie,防止静态资源URL被重写 RequestHeader unset Cookie </Location>
内容的提问来源于stack exchange,提问作者user3804769

