zoukankan      html  css  js  c++  java
  • Weblogic跨域session冲突解决办法

    一、现象:

    在WebLogic中,有两个不同域A(端口:9000)和B(端口:8000),应用CA在域A中,应用CB在域B中,进行如下操作:

    1、先登录应用CA,再登录应用CB,然后,切换回应用CA,发现应用CA的Session丢失;

    2、应用CA中有指向应用CB的链接,登录应用CA,点击指向应用CB的链接,应用CA的Session丢失;

    二、原因:

    因Cookie冲突导致Session丢失。

    Cookie的覆盖机制:

    如果一个新的cookie与一个已存在的cookie的NAME、Domain和Path属性值均相同,则旧的cookie会被丢弃。(参考:http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_cookies

    WebLogic的Cookie相关配置:

    属性名

    默认值
    cookie-name JSESSIONID 如未设置,默认为“JSESSIONID”
    cookie-path NULL 如未设置,默认为“/”
    cookie-domain NULL 如未设置,默认为发放cookie的服务器的域

      由于没有在Weblogic.xml配置文件中对cookie的相关属性值进行配置,因此应用CA和应用CB的cookie的Name、 Domain和Path属性值均为默认值,即Name为JSESSIONID,Path为“/”,Domain为服务器的IP地址,三个属性值均相同,这 就造成了应用CA的cookie与应用CB的cookie会互相覆盖,从而导致相应应用的session丢失。

    三、解决办法:

    在Weblogic.xml配置文件中增加Cookie的相应属性值的配置:

    方法1:设置各应用的cookie的Name属性为不同值

    方法2:设置各应用的cookie的Path属性为不同值(cookie的Path属性值需与context-root值保持一 致,context-root若未在Weblogic.xml中指定则默认为部署的WAR包名或文件夹名,若同一Weblogic服务器不同域中的两应用 context-root相同,则此方法不可行)

    附注:虽然问题是在WebLogic下的不同域部署应用进行互访的情况下发现的,但是,从问题产生的原因来看,在同一个域中的不同应用的互访,如果未做cookie相关属性值的配置,也会出现cookie冲突的问题。

    四、WebLogic修改JSESSION方法(如修改为JSESSIONID1):

    <?xml version="1.0" encoding="utf-8" ?>
    <!--
    <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    -->
    <!--
    <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
    -->
    <wls:weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
    <!--
    <weblogic-web-app>
    -->
    <wls:description>pis</wls:description>
        <wls:session-descriptor>
           <wls:timeout-secs>7200</wls:timeout-secs>
        <wls:cookie-name>JSESSIONID1</wls:cookie-name>
        <wls:encode-session-id-in-query-params>true</wls:encode-session-id-in-query-params>
     </wls:session-descriptor>
      <wls:context-root>pis</wls:context-root>
        <wls:container-descriptor>
        <wls:filter-dispatched-requests-enabled>true</wls:filter-dispatched-requests-enabled>
        <wls:index-directory-enabled>true</wls:index-directory-enabled>
     <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>  
      </wls:container-descriptor>
    </wls:weblogic-web-app>
  • 相关阅读:
    Traceroute侦测主机到目的主机之间所经路由情况的重要工具
    TCP/IP详解之IP协议
    Hello world
    [LeetCode] 198. 打家劫舍
    [LeetCode] 191. 位1的个数
    [LeetCode] 190. 颠倒二进制位
    python里的排序
    [LeetCode] 189. 旋转数组
    [LeetCode]187. 重复的DNA序列
    [LeetCode] 179. 最大数
  • 原文地址:https://www.cnblogs.com/interdrp/p/4937286.html
Copyright © 2011-2022 走看看