【问题标题】:Changing the session cookie name更改会话 cookie 名称
【发布时间】:2017-07-04 02:27:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: spark-java


    【解决方案1】:

    this pull 从 2017 年 3 月开始请求,可以像这样微调嵌入式码头:

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

    【讨论】:

    • 不幸的是,此解决方案仅适用于 2.6 版,但不适用于 2.7。
    • 对不起,我在 2.7 中没有研究过这个问题
    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2020-05-26
    • 2011-05-17
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多