如何在Jetty中使用SessionContext配置SessionHandler?

时间:2018-06-28 23:25:27

标签: kotlin jetty session-state

jetty-9.4.11.v20180605

我有一个项目,通过编程对其进行配置(在Kotlin / Java代码中,而不在.xml或.ini文件中),我非常高兴地使用Jetty。我正在将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

我认为也许我缺少从SessionHandler.newHttpSession()调用的AbstractSessionDataStore中的SessionContext,但是我不知道如何设置它。看起来SessionContex是通过调用受SessionHandler保护的sessionHandler.doStart()与SessionHandler关联的。如果这不可能,我想我可以使用WeakHashMap代替真正的Session,但是我认为最好使用现有的Session。

0 个答案:

没有答案