kotlin - 如何在 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 相关联。如果这不可能,我想我可以使用 WeakHashMap 而不是真正的 Session,但我假设尝试使用现有的 Session 会更好。
解决方案
推荐阅读
- php - PDF生成php - 每次传递数据或使用模板?
- javascript - 对存储为 JSON 的数据的 Sql 查询
- ios - 在 iOS 中将自定义视图共享为图像
- bluetooth-lowenergy - rxAndroidBle 扫描不显示任何设备
- javascript - 生成特定字符串与占位符和一组单词的所有可能组合
- django - Django 表单没有得到正确的列
- python-2.7 - 将pyplot对象存储在变量中
- function - Powershell函数elseif语句不起作用
- elasticsearch - 如何 PUT GET 或 POST 一个新的索引 Elasticsearch 映射
- windows - Windows 上的 Matlab parfor 停止 CPU