更改会话Cookie名称

时间:2017-07-03 06:50:13

标签: spark-java

我使用Spark Java和嵌入式Jetty来运行应用程序。该应用程序是一个小型Web应用程序,根据特定配置与某些外部服务进行多次集成。

要求是客户应该能够在不同端口的同一服务器中运行多个集成,例如:应用程序在启用了不同集成的不同端口8080和8084上运行。问题是当用户尝试在同一浏览器中访问这两个应用程序时会话cookie发生冲突,并且会产生问题。有没有办法可以将会话变量从JSESSIONID更改为其他内容?或者有没有办法告诉Spark在cookie域中包含端口?

我尝试使用getServletContext().getSessionCookieConfig().setDomain()设置Cookie域,但getServletContext()始终返回NULL。

非常感谢任何帮助。谢谢,

1 个答案:

答案 0 :(得分:2)

从2017年3月开始请求

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