`
lwj0212
  • 浏览: 49546 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

weblogic之同域下session冲突解决

    博客分类:
  • j2ee
阅读更多

这两天在搭一个环境,要求把金税三期的三个子系统(系统A、系统B、系统C)合并成一个部署,由于3个子系统相互之间有些配置文件冲突无法放在一个应用下部署,只好随找了2台机器,建了3个domain来部署。也许有人问,在1个domain下部署3个应用也可以吧,事实我也想这么部署,但由于公司框架要求上下文根必须为/,那这种方式部署就不行了。


3个系统部署在3个domain下,且使用了不同的ip和端口,如何才能让用户看起来是在一起呢?相信大家也有了答案,使用apache http server或nginx等之类的web服务器做代理实现。遂使用nginx搭建环境,搞定之。代理主要的配置如下:

#转发系统B管理

location ~ /jxgl/ {

proxy_pass http://192.168.40.134:8001;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header Host $host;

}


#转发系统C

location ~ /zcpg/ {

proxy_pass http://192.168.40.134:8002;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header Host $host;

}


#转发系统A管理

location ~ /fxgl/ {

proxy_pass http://192.168.110.121:7001;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header Host $host;

}


#转发其他所有

location ~ /.* {

proxy_pass http://192.168.110.121:7001;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header Host $host;

}

 

由配置可以看出,以/zcpg开头的应用,转发到http://192.168.40.134:8002,以/jxgl开头的应用,转发到http://192.168.110.121:7001,以 /fxgl开头的应用,转发到http://192.168.110.121:7001,其他的都转发到http://192.168.110.121:7001


单点登录问题随之而来,由于部门暂无单点登录产品,且目前无时间临时加上单点登录,只好让三个系统各自登录各自的系统。由于三个系统的登录地址完全一样,故做了一点配置上的改动,把系统B和系统C的登录和提交界面的url添加上了后缀。这样3个系统可以访问自己的登录url单独登录。改动后ngix增加代理的配置

#转发系统C__登录

location ~ .*_zcpg\.(webfaster|html|htm){

proxy_pass http://192.168.40.134:8002;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header Host $host;

}

#转发系统B管理__登录

location ~ .*_jxgl\.(webfaster|html|htm){

proxy_pass http://192.168.40.134:8001;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header Host $host;

}

 


至此,本以为万事大吉,结果登录过程中还是遇到了麻烦。先登录系统A,然后再登录系统B,结果系统B登录成功后,系统A却意外的退出了。仔细翻查了代码和配置,3个系统的登录过程完全是隔离开的,系统B的会话不会影响系统A的会话。


经过httpwatch跟踪登录过程,意外发现在系统B登录过程中,cookie中的jsessionid值被修改了。登录系统A成功后,再登录系统B,这是jsessionid被系统B的应用改了其他值,导致了系统A登录信息的丢失,以致被系统任务登录失效了。


众所周知,服务器端session是以jsessionid来识别是不是同一个会话,当客户端开启cookie时,会在cookie中设置jsessionid。客户端未开启时,会以url的方式传递jsessionid。问题的原因显然是weblogic初始化session时,如果session还未初始化,没有使用客户端传递的jsessionid来初始化(据说tomcat会使用客户端传递的jsessionid)。


问题找到了,解决办法就有2种方法。1是让weblogic使用客户端的jsessionid来初始化session 2是让每个应用使用不同的key来存储jsessionid的值。即系统A使用jsessionid,系统B使用jsessionidjxgl,系统C使用jsessionidzcpg。

第1种方法不知道怎么配置,第2中方法比较简单,直接配置WEB-INF\weblogic.xml即可。weblogic.xml增加如下配置:

<session-descriptor>
    <cookie-name>jsessionidjxgl</cookie-name>
</session-descriptor>

 
至此,问题解决。

 

分享到:
评论

相关推荐

    weblogic部署项目jar冲突解决

    标题"weblogic部署项目jar冲突解决"指出的核心问题是JAR包冲突。这是因为不同的应用服务器可能内置了不同版本的库,或者在类加载机制上有差异,导致原本在Tomcat上运行良好的应用在WebLogic上出现问题。以下是一些...

    weblogic设置session超时时间

    WebLogic 设置 Session 超时时间 WebLogic 是一个功能强大且流行的 Java 企业级应用服务器,支持多种方式来设置 Session 的超时时间。在本文中,我们将介绍如何在 WebLogic 中设置 Session 超时时间。 Method 1: ...

    将应用部署在weblogic中于axis2冲突的问题及解决方案

    "将应用部署在Weblogic中与Axis2冲突的问题及解决方案" 问题描述 在将应用部署到Weblogic Server 10.3时,出现了一个错误,抛出...同时,也可以通过在WEB-INF\lib目录下配置weblogic.xml文件来解决包冲突的问题。

    WebLogic之Session

    【标题】WebLogic之Session 在Java Web应用中,Session是一种服务器端的会话跟踪机制,用于在HTTP无状态协议中存储用户特定的信息。WebLogic Server作为一款强大的Java EE应用服务器,提供了对Session管理的强大...

    weblogic集群下的session复制

    WebLogic集群下的Session复制是构建高可用性和容错性Web应用程序的关键技术。在WebLogic Server环境中,当一个用户在集群中的某个服务器上登录并创建了Session后,如果该用户的请求被转发到集群中的其他服务器,...

    weblogic 集群,session 复制测试

    测试weblogic 集群环境(session replication)

    weblogic session共享的sql语句_mysql

    weblogic session共享的sql语句_mysql 官方网站提供了DB2、oracle、sqlserver、 如果想要那些数据库,就去官网上看吧, 我这个是mysql的。 都别下错了!

    Hibernate的Antlr在Weblogic中产生Jar冲突的解决办法

    ### Hibernate的Antlr在Weblogic中产生Jar冲突的解决办法 #### 背景与问题描述 在使用Hibernate框架进行Java应用开发时,特别是在Weblogic服务器环境下部署应用程序时,可能会遇到一个常见问题:由于不同版本的...

    weblogic10 与hibernate冲突解决方案 linux windows环境全解

    weblogic10 与hibernate冲突解决方案 错误如下:org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken linux windows 环境解决方案全解 Linux 启动脚本添加如下: export USER_...

    weblogic session丢失

    解决"weblogic session丢失"的问题需要综合考虑多个因素,通过细致的排查和适当的调整,通常可以找到并解决问题。在实际操作中,理解WebLogic Server的工作原理以及其配置选项是至关重要的。同时,持续的监控和维护...

    Weblogic负载均衡/Session复制之集群架构之Web应用实例

    Weblogic负载均衡/Session复制之集群架构 中的实例 https://oscar.blog.csdn.net/article/details/104144153

    Weblogic_10.3集群配置及session共享.doc

    Weblogic_10.3集群配置及session共享,

    Weblogic负载均衡/Session复制之集群架构之代理应用实例

    Weblogic负载均衡/Session复制之集群架构 中的代理应用实例 https://oscar.blog.csdn.net/article/details/104144153

    WebLogicServer集群Session复制

    3.1. 集群定义 一个集群就是一组协同工作的WebLogic服务器实例。 集群提供:高可用性、负载均衡、扩展性。 集群图示:图2、图3都是集群在应用环境中的示例。

    WebLogic Server 11g 集群、 Session复制(Windows)

    本文主要探讨的是在Windows环境下如何配置WebLogic Server 11g的集群以及实现Session复制,这对于构建高可用性和负载均衡的Web应用程序至关重要。 首先,集群是将多个独立的WebLogic Server实例组织在一起,它们看...

    tomcat-redis实现session共享

    为了解决这个问题,我们可以采用外部存储机制来共享Session,如Redis。本教程将详细讲解如何使用Tomcat与Redis集成,实现Session的共享。 首先,我们需要理解Tomcat和Redis的基本概念。Tomcat是一款开源的Java ...

Global site tag (gtag.js) - Google Analytics