Weblogicの同ドメインでのsession競合解決


この2日間、1つの環境を構築して、金税の3期の3つのサブシステム(システムA、システムB、システムC)を1つの配置に統合することを要求して、3つのサブシステムの相互間のいくつかの配置ファイルの衝突が1つの応用の下で配置することができないため、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単点登録の問題に伴い、部門は一時的に単点登録製品を持っておらず、現在は一時的に単点登録を加える時間がないため、3つのシステムをそれぞれのシステムに登録させるしかない.3つのシステムのログインアドレスが全く同じであるため、構成上の変更を少し行い、システム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のログイン中にクッキーのjsessionid値が変更されたことが意外にわかりました.ログインシステムAが成功した後、システムBにログインします.これはjsessionidがシステムBのアプリケーションによって他の値を変更されたため、システムAのログイン情報が失われ、システムタスクによってログインが失効しました.周知のように、サーバ側sessionはjsessionidで同じセッションかどうかを識別し、クライアントがcookieを開くと、cookieにjsessionidが設定される.クライアントが開いていない場合、jsessionidはurlで渡されます.問題の原因は明らかにweblogicがセッションを初期化していない場合、セッションがまだ初期化されていない場合、クライアントが渡すjsessionidを使用して初期化されていない(tomcatはクライアントが渡すjsessionidを使用するそうです).問題が見つかったら、解決策は2つあります.1は、クライアントのjsessionidをweblogicに使用させてsessionを初期化する2は、アプリケーションごとに異なるkeyを使用してjsessionidの値を格納することである.すなわち、システムAはjsessionidを使用し、システムBはjsessionidjxglを使用し、システムCはjsessionidzcpgを使用する.第1の方法はどのように配置することを知らないで、第2の方法は比較的に簡単で、直接WEB-INFweblogicを配置します.xmlでいいです.weblogic.xmlは次の構成に追加されます.
<session-descriptor>
    <cookie-name>jsessionidjxgl</cookie-name>
</session-descriptor>

これで問題が解決する.