首页 > 解决方案 > 如何在 Jetty 中使用 SessionContext 配置 SessionHandler?

问题描述

码头-9.4.11.v20180605

我有一个项目,我非常乐意通过编程方式配置 Jetty(在 Kotlin/Java 代码中,而不是在 .xml 或 .ini 文件中)。我正在将 Jetty 添加到一个较旧的项目中,它运行良好,除了配置 SessionHandler。看起来它永远不会得到 SessionContext 因为它在这里被 NPE 炸毁了:

java.lang.NullPointerException
    at org.eclipse.jetty.server.session.AbstractSessionDataStore.newSessionData(AbstractSessionDataStore.java:142)
    at org.eclipse.jetty.server.session.AbstractSessionCache.newSession(AbstractSessionCache.java:798)
    at org.eclipse.jetty.server.session.SessionHandler.newHttpSession(SessionHandler.java:794)
    at org.eclipse.jetty.server.Request.getSession(Request.java:1559)
    at org.eclipse.jetty.server.Request.getSession(Request.java:1532)

不足的配置代码(在 Kotlin 中)如下所示:

val sessionIdManager = DefaultSessionIdManager(server, SecureRandom())
server.sessionIdManager = sessionIdManager

val sessionHandler = SessionHandler()
sessionHandler.sessionIdManager = sessionIdManager
sessionHandler.sessionCache =
        DefaultSessionCacheFactory().getSessionCache(sessionHandler)

val dataStoreFactory = FileSessionDataStoreFactory()
dataStoreFactory.storeDir = File(someDir)
val dataStore = dataStoreFactory.getSessionDataStore(sessionHandler)

sessionHandler.sessionCache.sessionDataStore = dataStore
server.handler = sessionHandler

我想也许我在 AbstractSessionDataStore 中缺少一个 SessionContext ,它是从 调用的SessionHandler.newHttpSession(),但我不知道如何设置它。看起来 SessionContex 通过调用sessionHandler.doStart()受 SessionHandler 保护的 SessionHandler 与 SessionHandler 相关联。如果这不可能,我想我可以使用 Wea​​kHashMap 而不是真正的 Session,但我假设尝试使用现有的 Session 会更好。

标签: kotlinjettysession-state

解决方案


推荐阅读