How to change jsessionid cookie path to server root in Spring app on Jetty?
我有一个Jetty服务器在
1 | set-cookie:JSESSIONID=679b6291-d1cc-47be-bbf6-7ec75214f4e5; Path=/app; HttpOnly |
我需要cookie的路径为
1 | set-cookie:JSESSIONID=679b6291-d1cc-47be-bbf6-7ec75214f4e5; Path=/; HttpOnly; Secure |
在哪里配置会话cookie的适当位置?春天有助于此吗?它应该在
我尝试了很多东西,但到目前为止还没有任何工作。以下是我尝试过的一些事情。
尝试#1
使用以下内容创建
1 2 3 4 5 6 7 8 9 10 | <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> |
这会导致抛出异常:
1 2 3 | 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
使用以下内容创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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仍然是
尝试#3
使用以下内容更新了
1 2 3 4 5 6 7 8 | <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仍然是
尝试#4
使用以下内容更新了
1 2 3 4 5 6 7 8 9 | <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仍然是
Maven配置
请注意,我正在使用Jetty Maven插件版本8.1.5.v20120716并执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <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> 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> |
尝试#4是在正确的轨道上。
提供我正在阅读此权限,您正在使用上下文/应用程序中的maven配置,这意味着在您的web.xml中/您的设置是/ app,因为这是您正在配置的上下文的根。
换句话说,如果您只是部署到www.foo.com/app上下文中,则无法为www.foo.com/配置会话,想象一下如果其他人正在将应用程序部署到该URL中,您不能仅仅决定 使您的会话cookie适用于在该URL下运行的每个人。