24

私のWebアプリはTomcatで実行されていますが、ポート80http://localhost:8080/example.com/で提供されているApacheからリバースプロキシされています。私のWebアプリはヘッダーを調べて、リバースプロキシの背後にあることを確認します。これを(動的に)検出すると、サーブレットパスなしでURLを構築します。 http://example.com/request.getHeader("x-forwarded-host")

これは、JSESSIONIDCookieを除くすべてで正常に機能します。リバースプロキシを介してアクセスされる場合では/example.comなく、のパスが設定されます。リクエストにヘッダー/がある場合に、そのCookieのパスをオーバーライドするようにコードでTomcatに指示する方法がわかりません。x-forwarded-host

WebアプリからJSESSIONIDcookieを自分で設定しようとしましたが、結果としてSet-Cookieヘッダーが2つになり、そのうちの1つだけが正しいものになります。

4

3 に答える 3

37

Tomcat6はサーブレット2.3仕様を使用します。コードまたはTomcat構成によるCookieパスの変更はサポートされていません。

mod_proxyいくつかのディレクティブを使用して、Apache側から動作させることができました。ProxyPassReverseCookiePathディレクティブは私が望むことを正確に実行します。間違ったパスでTomcatからCookieを取得し、正しいパスに書き換えます。

<VirtualHost *:*>
    Servername example.com
    ProxyRequests Off
    ProxyPass / http://localhost:8080/example.com/
    ProxyPassReverseCookiePath /example.com /
    ProxyPassReverseCookieDomain localhost example.com
</VirtualHost>
于 2012-02-28T17:57:27.703 に答える
8

または、ノード/ Context(ファイル:/conf/context.xml)の属性sessionCookiePathを「/」に設定します。

<Context sessionCookiePath="/">

詳細については、http ://tomcat.apache.org/tomcat-7.0-doc/config/context.htmlを参照してください。

于 2013-09-24T15:44:30.533 に答える
5

サーブレット仕様のバージョン3.0では、セッションCookieを制御するための機能が導入されました。http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getSessionCookieConfig()

SessionCookieConfig scc = getServletContext().getSessionCookieConfig();
scc.setPath("/");
scc.setDomain("example.com");

Tomcat 7は、サーブレット仕様のバージョン3を使用します。

于 2013-09-25T18:18:36.330 に答える