1.问题现象: 当前应用采用集群方式部署,两个被管server承载应用分别部署在两台windows服务器上,AdminServer和ProxyServer与 Server1部署在一台服务器上,Server2部署在另一台服务器上,负载均衡与请求转发由Weblogic自带应用程序ProxyServer负 责。
当前用户登陆一段时间后(明显没有达到session超时上限3600秒)就被系统踢出又要重新登录,而且一段时间后又要重新登录。之后将存储用户状态在session中改为存储在cookie中问题得以缓解。
2.问题分析: 正常情况下没有session超时,用户不需要重新登录,发生此问题是由于session信息没有被正常保存所致,当前系统应用采用 的是集群方式,如果session复制出现问题一样会导致用户重新登录的问题,此外,必须确保会话中数据是可序列化的,否则可能复制失败。经过排查,原因 是当前采用集群没有配置session复制方式,即没有在weblogic.xml中配置session复制模块。当前应用的WEB-INF目录下根本没有weblogic.xml配置文件。
3.解决办法: 在WEB-INF目录下添加web.xml配置文件如下:
<?xml version="1.0" encording="UTF-8"?>
<?wls:weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmls:wls="http://www.bea.com/ns/weblogic/90"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<session-descriptor>
<persistent-store-type>replicated</persistent-store-type>
<sharing-enabled>true<sharing-enabled>
</session-descriptor>
<wls:context-root>/</wls:context-root>
</wls:weblogic-web-app>
修改后通过监控问题解决。