복붙노트

[SPRING] Jetty의 Spring 애플리케이션에서 jsessionid 쿠키 경로를 서버 루트로 변경하는 방법은 무엇입니까?

SPRING

Jetty의 Spring 애플리케이션에서 jsessionid 쿠키 경로를 서버 루트로 변경하는 방법은 무엇입니까?

나는 / app 컨텍스트에서 Spring 어플리케이션을 돌리는 Jetty 서버를 가지고있다. 앱은 세션을 사용하므로 세션 쿠키를 설정합니다. 세션 쿠키는 다음과 같이 응답합니다.

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

webapp의 컨텍스트 대신에 /의 경로를 가지려면 쿠키가 필요합니다. 게다가 안전한 쿠키를 사용하고 싶습니다. 나는이 응답을 원한다.

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

세션 쿠키를 구성 할 적절한 위치는 어디입니까? 봄이 도움이됩니까? web.xml에 있어야합니까? 또는 jetty-web.xml과 같이 컨테이너 고유의 방식으로 구성해야합니까?

나는 많은 것을 시도했지만, 지금까지 아무 일도하지 않았다. 다음은 내가 시도한 몇 가지 사항입니다.

다음과 같이 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>

이로 인해 예외가 throw됩니다.

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 

전체 스택 추적이이 요지에 있습니다.

다음과 같이 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>

이 예외는 발생하지 않지만 쿠키는 여전히 JSESSIONID이며 webapp 컨텍스트 경로 / app를 포함합니다.

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>

이 예외는 발생하지 않지만 쿠키는 여전히 JSESSIONID이며 webapp 컨텍스트 경로 / app를 포함합니다.

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>

이 예외는 발생하지 않지만 쿠키는 여전히 JSESSIONID이며 webapp 컨텍스트 경로 / app를 포함합니다.

Jetty Maven Plugin 버전 8.1.5.v20120716을 사용 중이며 mvn jetty :를 실행 중입니다.

<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>

해결법

  1. ==============================

    1.시도 # 4는 바른 길이다.

    시도 # 4는 바른 길이다.

    이 권리를 읽고 있다면 컨텍스트 / 응용 프로그램의 maven 구성을 사용하고 있습니다. 즉, web.xml의 / your 설정은 구성중인 컨텍스트의 루트이므로 / app입니다.

    다른 방법으로는 www.foo.com/에 대한 세션을 구성 할 수 없습니다. www.foo.com/app 컨텍스트에만 배포하는 경우 다른 사람이 해당 URL에 응용 프로그램을 배포하고 있다고 가정하면 결정할 수 없습니다 귀하의 세션 쿠키가 해당 URL로 운영되는 모든 사람에게 적용되도록하십시오.

  2. from https://stackoverflow.com/questions/12755499/how-to-change-jsessionid-cookie-path-to-server-root-in-spring-app-on-jetty by cc-by-sa and MIT license