如何在Jetty上的Spring应用程序中将jsessionid cookie路径更改为服务器根目录?

我有一个在/app上下文中运行Spring应用程序的Jetty服务器。 该应用程序使用会话,因此它设置会话cookie,响应如下:

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

我需要cookie来获取/替代webapp的上下文的路径。 另外,我想使用安全的cookie。 我想要这个回复:

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

配置会话cookie的适当位置在哪里? spring有助于此吗? 它应该在web.xml吗? 或者我是否需要以特定于容器的方式配置它,例如jetty-web.xml

我尝试了很多东西,但到目前为止还没有任何工作。 以下是我尝试过的一些事情。


尝试#1

使用以下内容创建了WEB-INF/jetty-web.xml

    MYJETTYSESSION / true true    

这会导致抛出exception:

 2012-10-05 02:41:41.180:WARN:oejx.XmlConfiguration:Config error at / 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 MYJETTYSESSION/truetrue 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 MYJETTYSESSION/truetrue java.lang.NoSuchMethodException: class 

完整的堆栈跟踪就在这个要点中 。

尝试#2

使用以下内容创建了WEB-INF/jetty-web.xml

   org.eclipse.jetty.servlet.SessionCookie MYSESSIONID   org.eclipse.jetty.servlet.SessionIdPathParameterName mysessionid   org.eclipse.jetty.servlet.SessionPath /   

这不会导致任何exception,但cookie仍然是JSESSIONID并包含webapp上下文路径/app

尝试#3

使用以下内容更新了WEB-INF/web.xml

  org.eclipse.jetty.servlet.SessionPath /   org.eclipse.jetty.servlet.SessionCookie MYSESS  

这不会导致任何exception,但cookie仍然是JSESSIONID并包含webapp上下文路径/app

尝试#4

使用以下内容更新了WEB-INF/web.xml

  720  SZSESSION / true true   

这不会导致任何exception,但cookie仍然是JSESSIONID并包含webapp上下文路径/app

Maven配置

请注意,我正在使用Jetty Maven插件版本8.1.5.v20120716并执行mvn jetty:run

 8.1.5.v20120716 3.0.0.RELEASE ...  org.mortbay.jetty jetty-maven-plugin ${jetty.maven.plugin.version}  10 manual ${jetty.stop.port} foo  /app   ...  

尝试#4是在正确的轨道上。

提供我正在阅读此权限,您正在上下文/应用程序中使用maven配置,这意味着在您的web.xml中/您的设置 / app,因为这是您正在配置的上下文的根。

换句话说,如果您只是部署到www.foo.com/app上下文中,则无法为www.foo.com/配置会话,想象一下如果其他人正在将应用程序部署到该URL中,您不能仅仅决定使您的会话cookie适用于在该URL下运行的每个人。