web-dev-qa-db-ja.com

JettyのSpringアプリでjsessionidcookieパスをサーバールートに変更するにはどうすればよいですか?

/appコンテキストでSpringアプリを実行しているJettyサーバーがあります。アプリはセッションを使用するため、次のように応答するセッションCookieを設定します。

set-cookie:JSESSIONID=679b6291-d1cc-47be-bbf6-7ec75214f4e5; Path=/app; HttpOnly

Webアプリのコンテキストではなく/のパスを持つCookieが必要です。さらに、安全なCookieを使用したいと思います。私はこの応答が欲しいです:

set-cookie:JSESSIONID=679b6291-d1cc-47be-bbf6-7ec75214f4e5; Path=/; HttpOnly; Secure

セッションCookieを設定する適切な場所はどこですか?春はこれに役立ちますか? web.xmlに含める必要がありますか?または、jetty-web.xmlなどのコンテナー固有の方法で構成する必要がありますか?

私はたくさんのことを試しましたが、今のところ何もうまくいきません。以下は私が試したいくつかのことです。


試行#1

次のようにWEB-INF/jetty-web.xmlを作成しました。

<Configure class="org.Eclipse.jetty.webapp.WebAppContext">
    <Get name="sessionHandler">
      <Get name="sessionManager">
        <Set name="sessionCookie">MYJETTYSESSION</Set>
        <Set name="sessionPath">/</Set>
        <Set name="secureCookies" type="boolean">true</Set>
        <Set name="httpOnly" type="boolean">true</Set>
      </Get>
    </Get>
</Configure>

これにより、例外がスローされます。

2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Set name="sessionPath">/</Set> Java.lang.NoSuchMethodException: class org.Eclipse.jetty.server.session.HashSessionManager.setSessionPath(class Java.lang.String)
2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Get name="sessionManager"><Set name="sessionCookie">MYJETTYSESSION</Set><Set name="sessionPath">/</Set><Set name="secureCookies">true</Set><Set name="httpOnly">true</Set></Get> Java.lang.NoSuchMethodException: class org.Eclipse.jetty.server.session.HashSessionManager.setSessionPath(class Java.lang.String)
2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at <Get name="sessionHandler"><Get name="sessionManager"><Set name="sessionCookie">MYJETTYSESSION</Set><Set name="sessionPath">/</Set><Set name="secureCookies">true</Set><Set name="httpOnly">true</Set></Get></Get> Java.lang.NoSuchMethodException: class 

完全なスタックトレースは この要点 にあります。

試み#2

次のようにWEB-INF/jetty-web.xmlを作成しました。

<Configure class="org.Eclipse.jetty.webapp.WebAppContext">
    <Call name="setInitParameter">
        <Arg>org.Eclipse.jetty.servlet.SessionCookie</Arg>
        <Arg>MYSESSIONID</Arg>
    </Call>
    <Call name="setInitParameter">
        <Arg>org.Eclipse.jetty.servlet.SessionIdPathParameterName</Arg>
        <Arg>mysessionid</Arg>
    </Call>
    <Call name="setInitParameter">
        <Arg>org.Eclipse.jetty.servlet.SessionPath</Arg>
        <Arg>/</Arg>
    </Call>
</Configure>

これによって例外が発生することはありませんが、CookieはJSESSIONIDのままであり、webappコンテキストパス/appが含まれています。

試行#3

WEB-INF/web.xmlを次のように更新しました。

<context-param>
    <param-name>org.Eclipse.jetty.servlet.SessionPath</param-name>
    <param-value>/</param-value>
</context-param>
<context-param>
    <param-name>org.Eclipse.jetty.servlet.SessionCookie</param-name>
    <param-value>MYSESS</param-value>
</context-param>

これによって例外が発生することはありませんが、CookieはJSESSIONIDのままであり、webappコンテキストパス/appが含まれています。

試行#4

WEB-INF/web.xmlを次のように更新しました。

<session-config>
    <session-timeout>720</session-timeout>
    <cookie-config>
        <name>SZSESSION</name>
        <path>/</path>
        <http-only>true</http-only>
        <secure>true</secure>
    </cookie-config>
</session-config>

これによって例外が発生することはありませんが、CookieはJSESSIONIDのままであり、webappコンテキストパス/appが含まれています。

Maven構成

Jetty Mavenプラグインバージョン8.1.5.v20120716を使用していて、mvn jetty:runを実行していることに注意してください。

<jetty.maven.plugin.version>8.1.5.v20120716</jetty.maven.plugin.version>
<spring.version>3.0.0.RELEASE</spring.version>
  ...
<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>${jetty.maven.plugin.version}</version>
    <configuration>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <reload>manual</reload>
        <stopPort>${jetty.stop.port}</stopPort>
        <stopKey>foo</stopKey>
        <webAppConfig>
              <contextPath>/app</contextPath>
        </webAppConfig>
    </configuration>
       ...
</plugin>
16
Tauren

試み#4は正しい方向に進んでいます。

私がこの権利を読んでいるとすれば、あなたはコンテキスト/ appでMaven構成を使用しています。これは、web.xmlで/あなたの設定is/appを意味します。これは、コンテキストのルートであるためです。再構成。

別の言い方をすれば、www.foo.com/appコンテキストにのみデプロイしている場合は、www.foo.com /のセッションを構成できません。他の誰かがそのURLにアプリをデプロイしているとしたら、ただ決めることはできません。セッションCookieをそのURLで動作するすべてのユーザーに適用するため。

4
jesse mcconnell