最近jetty 9.3.11から9.4.6にアップグレードしました。 9.4.xはHashSessionManagerをサポートしていないので、独自のカスタムSessionHandlerを作成しました。しかし、このSessionHandlerをWebAppContextに接続すると、サーブレットからアクセスしようとするとコンテキストがnullになります。ログにエラーがスローされません。jetty 9.4異なるコンテキスト間でセッションを共有
コードの関連セクション:私のカスタムセッションハンドラの
MyCustomSessionHandler sessionHandler = new MyCustomSessionHandler();
HandlerCollection handlers_ = new HandlerCollection(true);
COntextHandlerCollection chc_ = new ContextHandlerCollection();
for(WebAppConfig wap: webAppConfigs) //webappconfig a POJO from where I am getting webapp configs
{
String path = wap.getPath();
String warFile = wap.getWarFile();
WebAppContext context =
new WebAppContext(chc_, warFile, path);
// context.setSessionHandler(new SessionHandler()); // this one works.
context.setSessionHandler(sessionHandler); // this one doesnt work.
for (ServletConfig servletConfig: wap.getServletConfigs()) //ServletConfig is another POJO to get servlet configs
{
String servletName = servletConfig.getName();
String servletPath = servletConfig.getPath();
Servlet servlet = servletConfig.getServlet();
ServletHolder servletHolder = new ServletHolder(servlet);
context.addServlet(servletHolder, servletPath);
}
}
handlers_.setHandlers(new Handler[] { chc_, new DefaultHandler()});
server_.setHandler(handlers_);
サンプル
public class MyCUstomSessionHandler extends SessionHandler
{
public MyCustomSessionHandler()
{
super();
}
public void setSecureCookies(boolean secureCookies)
{
getSessionCookieConfig().setSecure(secureCookies);
}
public void setHttpOnly(boolean httpOnly)
{
getSessionCookieConfig().setHttpOnly(httpOnly);
}
public void setMaxCookieAge(int age)
{
getSessionCookieConfig().setMaxAge(age);
}
}
さらに明確化:私はシングルトンsessionhandlerを作成しての方法として、異なるWepAppContext渡ってそれを共有しているため、それが起こりますそれらの間でセッションを共有する。このメソッドは、9.3では問題なく動作していたようですが、9.4の新しいセッション管理では機能しません。
この問題を解決するための助けに感謝します。