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。