2017-07-03 139 views
3

我正在使用Spark Java与嵌入式Jetty运行应用程序。该应用程序是一个小型的网络应用程序,根据特定的配置与多个外部服务集成。更改会话cookie名称

要求是,客户应该能够运行在不同的端口在同一台服务器多次整合的结果,即对如:应用程序在不同的端口8080和8084启用不同的集成运行。问题是,当用户试图在同一个浏览器中访问这两个应用程序时会话cookie发生冲突,并且会产生问题。有没有一种方法可以将会话变量从JSESSIONID更改为其他内容?或者,有没有办法让我知道Spark在cookie域中也包含端口?

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

任何帮助,非常感谢。谢谢,从2017年三月要求

回答

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 -v localhost:4567/hello 

并由此产生的输出会给你以下Set-Cookie标题:

Set-Cookie: XSESSION=node01j56de4fpp69kl2ye6br6cvno0.node0;Path=/ 
+0

Unfo幸运的是,该解决方案仅适用于2.6版本,但不适用于2.7版本。 – Razavi