如何在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下运行的每个人。