我使用Spark Java和嵌入式Jetty来运行应用程序。该应用程序是一个小型Web应用程序,根据特定配置与某些外部服务进行多次集成。
要求是客户应该能够在不同端口的同一服务器中运行多个集成,例如:应用程序在启用了不同集成的不同端口8080和8084上运行。问题是当用户尝试在同一浏览器中访问这两个应用程序时会话cookie发生冲突,并且会产生问题。有没有办法可以将会话变量从JSESSIONID更改为其他内容?或者有没有办法告诉Spark在cookie域中包含端口?
我尝试使用getServletContext().getSessionCookieConfig().setDomain()
设置Cookie域,但getServletContext()
始终返回NULL。
非常感谢任何帮助。谢谢,
答案 0 :(得分:2)
this,可以像这样微调嵌入式码头:
public class Main {
public static void main(String ...args) throws Exception {
EmbeddedServers.add(EmbeddedServers.Identifiers.JETTY, (Routes routeMatcher, StaticFilesConfiguration staticFilesConfiguration, boolean hasMultipleHandler) -> {
MatcherFilter matcherFilter = new MatcherFilter(routeMatcher, staticFilesConfiguration, false, hasMultipleHandler);
matcherFilter.init(null);
JettyHandler handler = new JettyHandler(matcherFilter);
handler.getSessionCookieConfig().setName("XSESSION");
return new EmbeddedJettyServer((int maxThreads, int minThreads, int threadTimeoutMillis) -> {
return new Server();
}, handler);
});
get("/hello", (req, res) -> {
req.session(true);
return "Hello World";
});
}
}
现在您可以使用curl验证结果:
curl -v localhost:4567/hello
,结果输出将为您提供以下Set-Cookie
标题:
Set-Cookie: XSESSION=node01j56de4fpp69kl2ye6br6cvno0.node0;Path=/